关于extends 和 constructor的默认实现与覆盖策略

关于extends 和 constructor的默认实现与覆盖策略

今天在TSS上又看到有人讨论java多继承的问题,是想起这个话题的原因。^_^


java中任何类都默认继承 Java.lang.Object,除非被另一个继承覆盖(override),hoho 俺一直这么称呼override的,感觉更加贴切一些。
请看以下代码:

package  org.myth.test;

public   class  SuperSon{
    
    SuperSon(){
        System.out.println(
" this is super son " );
    }

}

对于编译器来说,这段代码会被首先补全为:

package  org.myth.test;

public   class  SuperSon  extends  Object{
    
    SuperSon(){
        System.out.println(
" this is super son " );
    }

}

对待任何一个类,编译器会去检查extends关键字,如果没有,编译器会默认添加extens Object

extends Object就是一段默认隐藏的代码,同样在Constructor中,也有一段默认隐藏的代码。

package  org.myth.test;

public   class  SuperSon  extends  Object{
    
    SuperSon(){
        
super (); // 这就是一段默认隐藏代码
        System.out.println( " this is super son " );
    }

    //
整个构造方法也是一段默认隐藏代码

}

如同编译类时编译器回去检查extends关键字一样,编译器会首先检查是否存在constructor,如果没有,默认增加ClassName()构造方法。
在构造方法内部,编译器会检查第一行代码是否为super构造方法,如果不是,默认添加super()

这个就是为什么 new一个对象的时候,首先调用的是父类的构造方法。

一个错误代码示例:
package  org.myth.test;

public   class  SuperMan {
    
    SuperMan(String s){
        System.out.println(
" this is super man " );
    }

}



package  org.myth.test;

public   class  SuperSon  extends  SuperMan{
    
    SuperSon(){
        System.out.println(
" this is super son " );
    }

}


嘿嘿 第一篇文章

你可能感兴趣的:(关于extends 和 constructor的默认实现与覆盖策略)