父类里的ele属性
如果是public的直接super.ele="abc"
但如果是private的,并有set方法就调用set方法
super.setEle("abc")
非private 的,可以使用super的。楼主,你这个语句不是在方法中使用,不用这样调用的。要在方法体内使用。如
//子类
public class Son extends father{
public Son(){
super.i=1 //给父类中i赋值
}
}
这个题考察的是子类继承父类需要注意的地方,但是题出的很奇葩,你子类继承父类时,题目给定的方法public YoshiIslandTaxCalculator() {
super(getTaxRate())
double taxRate = 0.07
}
会报编译错误,原因是 显示调用构造器时不能引用一个类的实例域,
按照继承规则,子类的对象将可以使用到父类的方法,所以,父类中那些使用了构造器参数值的方法,其子类对象将可能访问到。因此,必须要确保父类构造器的参数可以被赋值。
“可以被赋值”有两种方式,
一是先实例化出对象,再通过setter赋值;
二是在实例化的时候就赋值,即通过构造器参数的形式传参。
你的题目中,父类没有提供默认的无参构造器。所以,方式一被封死。
而方式二在本例中,无法通过在实例化子类同时,同时为父类构造器变量赋值,编译器意识到了这个错误,因此会报编译错误。
/*
* 子类构造方法中必须通过super关键字调用父类的构造方法
* 构造子类之前必先构造父类,子类构造方法中第一句应有个默认的super方法
* 若子类没有写,则编译器自动加入对父类无参构造的调用;
* 若父类的默认构造方法有参数,则子类也应写super配参数,
* 或者在子类中重新定义super构造
* @param taxRate
*/
public YoshiIslandTaxCalculator(Double taxRate) {
super(taxRate)
}