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

很基础总是忘 记录一下

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

总结:
成员变量、静态方法按照引用变量声明的类型静态绑定;实例方法按照引用变量引用的实例动态绑定

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值