java初学者总结(2)

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
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值