下面代码的输出是什么?

更新时间:2023-07-08 14:16:16 阅读: 评论:0

下⾯代码的输出是什么?
public class Ba{
private String baName = "ba";
爸爸的英文
public Ba(){
董卿青春callName();手臂长痣
}
public void callName(){
System. out. println(baName);
}
static class Sub extends Ba{
private String baName = "sub";
public void callName(){
天下歌词System. out. println (baName) ;
}微信动画头像
}
public static void main(String[] args){
Ba b = new Sub();
}
}
A、null
B、sub
C、ba
1.⾸先,需要明⽩类的加载顺序。
晚安的唯美句子(1) ⽗类静态代码块(包括静态初始化块,静态属性,但不包括静态⽅法)
(2) ⼦类静态代码块(包括静态初始化块,静态属性,但不包括静态⽅法 )
(3) ⽗类⾮静态代码块( 包括⾮静态初始化块,⾮静态属性 )
(4) ⽗类构造函数
(5) ⼦类⾮静态代码块 ( 包括⾮静态初始化块,⾮静态属性 )
(6) ⼦类构造函数
其中:类中静态块按照声明顺序执⾏,并且(1)和(2)不需要调⽤new类实例的时候就执⾏了(意思就是在类加载到⽅法区的时候执⾏的)
2.其次,需要理解⼦类覆盖⽗类⽅法的问题,也就是⽅法重写实现多态问题。鉴定表
Ba b = new Sub();它为多态的⼀种表现形式,声明是Ba,实现是Sub类,理解为 b 编译时表现为Ba类特性,运⾏时表现为Sub类特性。
当⼦类覆盖了⽗类的⽅法后,意思是⽗类的⽅法已经被重写,题中⽗类初始化调⽤的⽅法为⼦类实现的⽅法,⼦类实现的⽅法中调⽤的baName为⼦类中的私有属性。
纾缓
由1.可知,此时只执⾏到步骤(4),⼦类⾮静态代码块和初始化步骤还没有到,⼦类中的baName还没有被初始化。
所以此时 baName为空。所以为null。

本文发布于:2023-07-08 14:16:16,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1085614.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:静态   代码   包括   表现   加载
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图