1.继承中构造函数的问题
class A {
A() {
System.out.println("调用了");
}
}
class B extends A {
B(){
System.out.println("no");
}
}
public class E {
public static void main(String[] args) {
B b = new B(); //OK
}
}
….子类实例化生成对象时,把这个类加载到JVM上,会先生成类的实例,但是new关键字有一个特殊的性质就是会先调用类的无参构造方法,如果这个类继承了父类,则子类实例化时,会先调用父类的无参构造方法,因此在这儿B b = new B()的过程中,会先调用A类的无参构造方法。
….java继承构造方法调用,创建子类实例的时候,如果没有super调用父类带参数的构造方法,则默认会调用父类的无参构造方法,相当于调用super(),其实这句就相当于“隐藏”调用语句。
….子类继承父类时,若父类定义了有参数的构造方法,而没有定义无参数的构造方法,那么在子类中的构造方法必须用super语句去调用父类定义的有参数的构造方法,否则无法通过编译。因此,建议在定义父类时,如写了构造方法,最好写上一个无参数的构造方法。
2.当父类的方法被static修饰时,子类中覆盖的方法也必须用static修饰。反之,父类的方法没有static修饰,子类中覆盖的方法也不能用static修饰。
3.
class A{}
class B extends A{}
class C extends B{}
class D extends C{}
class Demo1
{
public static void main(String[] args)
{
A a=new C();
System.out.println(a instanceof A);//true
System.out.println(a instanceof B);//true
System.out.println(a instanceof C);//true
System.out.println(a instanceof D);//false
}
}