您的位置:首页 > 编程语言 > Java开发

java初学者总结(2)

2015-05-30 14:58 316 查看
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
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  初学者 java