为了账号安全,请及时绑定邮箱和手机立即绑定

为什么必须用Person p=new Child();才会显示下划线

而Child c=new Child();不会出现下划线

正在回答

5 回答

//1 有警告,需忽略
Person p = new Child();
//2 无警告
Child p = new Child();

p.sing();

new Child()创建了Child类的实例化对象,变量p引用了这个Child类的对象,所以p是引用变量,而p前面的类名则表明p的类型,即是Person类型或者Child类型。

Person类型下的方法已经过时,而Child类型依然实现了这个方法(注意这里的“过时”的意思,老师讲的时候是说sing()方法定义得不太合适,因为有些类根本不需要实现这个方法,就像有些人不会唱歌,但是标准里却有唱歌这个标准)。所以如果要将引用变量声明为Person类型并去调用过时的sing()方法是不合适的,所以要有警告;然而就像有些人还是很会唱歌的,若声明为Child类型的并去调用sing()方法,它不仅会唱,唱得还非常好,是再合适不过了,所以就无需警告。我觉得还是要理解“过时”的含义,过时不是错,只是不适用于大多数。

######

这也只是我的理解,觉得我理解得也不透彻,因为也注意到了这个问题,所以才这样关注。以后也会继续关注的。

2 回复 有任何疑惑可以回复我~

子类Child覆盖了父类的方法   使用了@Override

但是父类Person 修饰了一个已经过时的方法  使用了@Deprecated

此时强行调用父类继承来的方法就会有个代码过时的横线,并且报一个代码过时的警告,但不会影响正常使用。

如果要去掉警告可以使用  @suppressWarings("deprecation")  来忽略这个警告


0 回复 有任何疑惑可以回复我~

你不NEW个出来就不会调用  都不用他当然不管你是不是过时了


0 回复 有任何疑惑可以回复我~

有可能child的构造函数标记为已过时

0 回复 有任何疑惑可以回复我~

类型对应当然不会有下划线;对应不上才会

0 回复 有任何疑惑可以回复我~
#1

深夜雀电台 提问者

不是下划线,是代表代码过时的横线
2015-12-22 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么必须用Person p=new Child();才会显示下划线

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信