Java 继承加载顺序 以及 多态中变量和方法

来源:互联网 发布:开淘宝店应该注意什么 编辑:程序博客网 时间:2024/06/06 09:16
很基础总是忘 记录一下Java 继承加载顺序 class Test0 {    public static String staticField = "父类-静态变量";    public String field = "父类-普通变量";    public Test0() {        System.out.println("父类-构造器");    }    static {        System.out.println(staticField);        System.out.println("父类-静态初始化块");    }    {        System.out.println(field);        System.out.println("父类-初始化块");    }}public class Test1 extends Test0{    public static String staticField = "子类*静态变量";    public String field = "子类*普通变量";    static {        System.out.println(staticField);        System.out.println("子类*静态初始化块");    }    {        System.out.println(field);        System.out.println("子类*初始化块");    }    public Test1() {        System.out.println("子类*子类构造器");    }    public static void main(String args[]) {        System.out.println("main方法");        Test1 test1 = new Test1();    }}输出结果为:父类-静态变量父类-静态初始化块子类*静态变量子类*静态初始化块main方法父类-普通变量父类-初始化块父类-构造器子类*普通变量子类*初始化块子类*子类构造器

最后给出执行步骤:

1、父类静态变量和静态代码块(先声明的先执行);

2、子类静态变量和静态代码块(先声明的先执行);

3、父类的变量和代码块(先声明的先执行);

4、父类的构造函数;

5、子类的变量和代码块(先声明的先执行);

6、子类的构造函数。

多态中变量和方法
class Fathers{  String var="FatherVar";  static String staticVar="StaticFatherVar";  void method(){System.out.println("Father method");}  static void staticMethod(){System.out.println("Static Father method");}}class Sons extends Fathers{  String var="SonVar";  static String staticVar="StaticSonVar";  void method(){System.out.println("Son method");}  static void staticMethod(){System.out.println("Static Son method");}  String sonVar=null;  void sonMethod(){}}
    public static void main(String[] args) {        
// TODO Auto-generated method stub       
Fathers f = new Sons();        
System.out.println("f.var=" + f.var);        
System.out.println("f.staticVar=" + f.staticVar);                
Sons ff=(Sons)f;        
System.out.println("ff.var=" + ff.var);       
System.out.println("ff.staticVar=" + ff.staticVar);                
f.method();        
f.staticMethod();    
}
结果:
f.var=FatherVar
f.staticVar=StaticFatherVar
ff.var=SonVar
ff.staticVar=StaticSonVar
Son method
Static Father method
总结:
成员变量、静态方法按照引用变量声明的类型静态绑定;实例方法按照引用变量引用的实例动态绑定

原创粉丝点击