为什么必须用Person p=new Child();才会显示下划线
而Child c=new Child();不会出现下划线
而Child c=new Child();不会出现下划线
2015-12-15
//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()方法,它不仅会唱,唱得还非常好,是再合适不过了,所以就无需警告。我觉得还是要理解“过时”的含义,过时不是错,只是不适用于大多数。
######
这也只是我的理解,觉得我理解得也不透彻,因为也注意到了这个问题,所以才这样关注。以后也会继续关注的。
举报