文章目录
- 任务描述
- 相关知识
- 编程要求
- 测试说明
- 答案
任务描述
本关任务:计算商品打折后的价格。
相关知识
在编写子类的时候,我们仍然可以声明一些新的成员变量,其中有一种特殊的情况就是,所声明的成员变量的名字和从父类继承来的成员变量的名字相同(声明的类型可以不同),在这种情况下,子类就会隐藏所继承的成员变量。
子类继承的方法只能操作子类继承和隐藏的成员变量(意思就是说子类继承的方法所操作的成员变量一定是被子类继承和隐藏的成员变量)。子类新定义的方法可以操作子类继承和子类新声明的成员变量,但是无法操作子类隐藏的成员变量。
例子:
class Father {
// 定义名称属性
String name = “Jack”;
}
class Son extends Father {
// 定义名称属性
String name = “Jack’s son”;
}
public class ClazzTest {
public static void main(String[] args) {
// 实例化子类对象
Son s1 = new Son();
System.out.println(" s1.name : " + s1.name);
}
}
执行结果:
s1.name : Jack's son
在上述代码中,我们获取到的 name 属性的值为“Jack’s son”,而父类的 name 值却获取不到,那是因为在一个类中,子类中的成员变量如果和父类中的成员变量同名,那么即使他们类型不一样,只要名字一样,父类中的成员变量都会被隐藏。在子类中,父类的成员变量不能被简单的用引用来访问。我们在用到时,必须从父类的引用获得父类被隐藏的成员变量。
如何引用呢?
Son s1 = new Son();
System.out.println(" s1.name : " + ((Father)s1).name);
执行结果:
s1name : Jack
我们将子类对象强转为父类对象,这样就可以拿到父类定义的 name 属性的值了。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
可在右侧“测试结果”区查看具体的测试集详情。
答案
/**
* 任务:计算商品打折后的价格
*/
class Total {
double totalMoney = 50.00;
public double getTotalMoney(){
return totalMoney;
}
}
// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/
// 定义一个Seal的公开类,并继承Total类
// 定义两个变量,分别代表折扣和总价格,类型为double
// 定义一个有参构造方法,带两个参数,依次为折扣和总价格
// 定义一个方法名为sealX的方法,返回类型为double,计算打折后的商品价格并返回
public class Seal extends Total{
// 定义两个变量,分别代表折扣和总价格,类型为double
double discount; // 折扣
double totalMoney; // 总价
// 定义一个有参构造方法,带两个参数,依次为折扣和总价格
public Seal(double discount, double totalMoney) {
this.discount = discount;
this.totalMoney = totalMoney;
}
// 定义一个方法名为sealX的方法,返回类型为double,计算打折后的商品价格并返回
public double sealX(){
return totalMoney*discount;
}
}
/********** End **********/