Hi, First of all, I did some research and found this:
http://free-pascal-general.1045716.n5.nabble.com/Compiler-Warning-Constructor-should-be-public-td2825747.html But that did not convince me. So here is my situation and question. I have the following case: TBase = class public constructor Create; //VER-0 end; TDerived = class(TBase) private constructor Create(param1); //VER-1 public constructor Create; reintroduce; //VER-0' constructor Create(param1, param2); //VER-2 constructor Create(param1, param2, param3); //VER-3 end; My purpose is that while using TDerived, only VER-2 and VER-3 of the constructors should be used, VER-0 and VER-1 are used INTERNALLY by VER-2 and VER-3 and should NOT be used publicly. As restricted by the "rule of OOP", you cannot make a method which is public in base class private in descendants, I plan to do the following: 1) reintroduce a Create (without param), which just throw an exception explaining that this MUST NOT be called directly. Meanwhile, use "inherited Create" internally in other versions of the constructors. 2) Make VER-1 private so that it cannot be called outside. Now the compiler throw a warning that constructor should be public. In the post I referred, Graeme explained that: ============================================================== Your code is flawed. Object Pascal is quite clear regarding visibility rules. TObject has a Public constructor. You can only raise the visibility from there, not reduce visibility. Imagine how confusing it will be if you code was a library of some sorts and other developers had to use it. In a inherited class, you have public visibility to the constructor or some other method, and then suddenly in the descendant class the methods are hidden from the developer?? Not a good idea. ============================================================== I don't understand this, because to me, the VER-1 constructor is introduced in TDerived, make it non-public does NOT reduce the visibility of VER-0 constructor, hence is not a violation of visibility rules, is it??? Thanks! Xiangrong
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal