自行编写代码测试以下特性,在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。
package src.afterclass; public class dongshoudongnao { public static void main(String args[]) { EF ef=new EF("张三"); ef.fly(); } } class ABC { private String name; public ABC(String name) { this.name = name; } public void fly() { System.out.println("父类"); } } class EF extends ABC { public EF(String name) { super(name); // TODO Auto-generated constructor stub } public void fly() { //super.fly(); System.out.println("子类"); } }
package src.afterclass; public class dongshoudongnao { public static void main(String args[]) { EF ef=new EF("张三"); ef.fly(); } } class ABC { private String name; public ABC(String name) { this.name = name; } public void fly() { System.out.println("父类"); } } class EF extends ABC { public EF(String name) { super(name); // TODO Auto-generated constructor stub } public void fly() { super.fly(); System.out.println("子类"); } }
第一个是调用的父类的函数,
第二个调用子类的函数;
第三个是将子类赋给父类,相当于调用的是子类;
第五个是将父类强制转化成子类;
下面哪一个会导致程序运行时错误?
m=d; d=m; d=(Dog)m; d=c; c=(Cat)m;
先进行自我判断,得出结论后,运行相关代码,看看你的判断是否正确。
自我判断:"d=m","d=c"引起编译错误
“c=(Cat)m”引起运行时错误
原因:“d=m”编译错误是因为Mammal类是Dog类的父类,子类中的成员比父类的多,父类无法将子类初始化;
“d=c”编译错误是因为两者代表不同的类,不能给对方赋值;
“c=(Cat)m”会引起运行时错误是因为Dog类的对象d已将Mammal类的对象m初始化,m被转换为Dog类后不能再转换为Cat类。