深夜雀电台
2015-12-15 19:39
而Child c=new Child();不会出现下划线
//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()方法,它不仅会唱,唱得还非常好,是再合适不过了,所以就无需警告。我觉得还是要理解“过时”的含义,过时不是错,只是不适用于大多数。
######
这也只是我的理解,觉得我理解得也不透彻,因为也注意到了这个问题,所以才这样关注。以后也会继续关注的。
子类Child覆盖了父类的方法 使用了@Override
但是父类Person 修饰了一个已经过时的方法 使用了@Deprecated
此时强行调用父类继承来的方法就会有个代码过时的横线,并且报一个代码过时的警告,但不会影响正常使用。
如果要去掉警告可以使用 @suppressWarings("deprecation") 来忽略这个警告
你不NEW个出来就不会调用 都不用他当然不管你是不是过时了
有可能child的构造函数标记为已过时
类型对应当然不会有下划线;对应不上才会
全面解析Java注解
126934 学习 · 102 问题
相似问题