当子类继承父类时 装载子类时同时也装载类父类 获得了父类的静态成员 想要得到父类的非静态方法要先初始化父类
那么父类要是抽象类 如果抽象类不能被实例化那不是获取不到父类的非静态成员吗? 因为那时还没有父类对象
下面代码证明了抽象类也是可以实例化的 因为调用了父类的构造方法和非静态成员
abstract class Work{
private int a;
public Work(){
System.out.println(a);
}
public void run(){
System.out.println("11111");
}
}
class Kk extends Work{
public Kk(){
super(); //只能通过该方法初始化父类
}
public static void main(String[] args) {
new Kk().run();
//new Work(); 不能通过new 来初始化父类
}
}
结果为
0
11111
子类覆盖方法时只能抛出父类异常的子类吗?
通过下面的代码结果了解到即使父类没抛出运行期异常子类也可以抛出运行期异常或子异常
class T{
void run(){
System.out.print("fu");
}
}
class T1 extends T{
void run()throws RuntimeException,BufferUnderflowException{
System.out.print("zi");
}
public static void main(String[] args) {
T t=new T1();
t.run();
}
}
编译通过 结果是zi 证明覆盖成功
很多书上都说子类抛出的异常必须是父类抛出的子异常
那么如果笔试时有个判断题 子类抛出的异常必须是父类抛出的子异常 是打勾还是X了 |