类的构造方法是否不能在子类中覆盖?
NO
请分析一下静态的含义,方法和变量加static有什么意义?
实例生成前就以加载

解决方案 »

  1.   

    很显然,构造函数是不能被复写的.(也许是构造函数隐含有final属性)public class Pack1 {    public static String test = "test";    public Pack1() {
        }    public static String static_getPack() {
            return "Pack1";
        }    public String getPack() {
            return "Pack1";
        }
    }public class Pack2 extends Pack1 {    public static String static_getPack() {
            return "Pack2";
        }    public String getPack() {
            return "Pack2";
        }    public static void main(String[] args) {        System.out.println(Pack1.test);//实例化之前已经加载
            System.out.println(Pack1.static_getPack());//实例化以前已经加载        Pack1 p1_1 = new Pack1();
            Pack1 p1_2 = new Pack1();
            Pack1 p1_p2 = new Pack2();
            Pack2 p2_1 = new Pack2();
            System.out.println(p1_1.test == p1_2.test);        System.out.println(p1_2.static_getPack());
            
            System.out.println(p2_1.static_getPack());
            
            System.out.println(p1_p2.getPack());
            System.out.println(p1_p2.static_getPack());    }}
    结果:
    test//实例化前已经加载
    Pack1//实例化前已经加载
    true//对于两个实例,他们的静态属性相等(而不仅仅是equals)
    Pack1//pack1的静态函数依然存在
    Pack2//pack2的静态函数依然存在
    Pack2//pack1的动态函数被pack2的函数动态绑定
    Pack1//pack1的静态函数没有被绑定
    结果就可以看出,任何一个静态属性在内存中的实例只有一个.是在实例化前就已经加载的.
    对于方法来说,也是一样,而子类可以如普通方法一样重载父类的static方法.而不构成复写..
      

  2.   

    稍微想想也知道不行啊,父类的构造函数名是父类名,子类的构造函数名是子类名,假如可以覆写父类的构造函数,就得在子类中定义一个以父类名为名的构造函数,这就出现矛盾了:子类中出现了一个不是以子类名为名的构造函数!so,can not!