子类不得不需要的构造方法
2019-01-19 本文已影响3人
大黑跟小白的日常
子类不得不需要的构造方法
有关private、protected修饰构造方法,对子类的影响
先看一段代码
public class AC {
protected String s;
privateAC () {}
protected AC(String s){
this.s = s;
}
public AC getAc() {
return new AC();
}
}

它说,没有一个可以访问父类构造的入口,父类的默认构造是不可见的。
所以需要找一个入口,能访问父类构造。
看错误解决提示
需要添加一个子类构造,子类构造中访问父类中可访问的构造,如下
public class ACSub extends AC {
protected ACSub(String s) {
super(s);
}
}
还有一种解决方法就是将父类的私有构造,放开。那么子类就不需要任何构造了。
子类隐式默认的无参构造会默认访问父类的无参构造,只要可以访问的话。
这样,我们就具有了一种能力,如果我们想让子类,必须具有类似于自己的构造方法,那么就将无参构造私有,提供可访问的目标构造。
就跟一个必须需要重写的abstract方法一样

