学习-Java继承和多态之成员变量隐藏之优惠促销价格计算

第1关:学习-Java继承和多态之成员变量隐藏之优惠促销价格计算

任务描述

本关任务:计算商品打折后的价格。

相关知识

在编写子类的时候,我们仍然可以声明一些新的成员变量,其中有一种特殊的情况就是,所声明的成员变量的名字和从父类继承来的成员变量的名字相同(声明的类型可以不同),在这种情况下,子类就会隐藏所继承的成员变量。

子类继承的方法只能操作子类继承和隐藏的成员变量(意思就是说子类继承的方法所操作的成员变量一定是被子类继承和隐藏的成员变量)。子类新定义的方法可以操作子类继承和子类新声明的成员变量,但是无法操作子类隐藏的成员变量。

例子:

 
  1. class Father {
  2. // 定义名称属性
  3. String name = "Jack";
  4. }
  5. class Son extends Father {
  6. // 定义名称属性
  7. String name = "Jack's son";
  8. }
  9. public class ClazzTest {
  10. public static void main(String[] args) {
  11. // 实例化子类对象
  12. Son s1 = new Son();
  13. System.out.println(" s1.name : " + s1.name);
  14. }
  15. }

执行结果:

 
  1. s1.name : Jack's son

在上述代码中,我们获取到的 name 属性的值为“Jack's son”,而父类的 name 值却获取不到,那是因为在一个类中,子类中的成员变量如果和父类中的成员变量同名,那么即使他们类型不一样,只要名字一样,父类中的成员变量都会被隐藏。在子类中,父类的成员变量不能被简单的用引用来访问。我们在用到时,必须从父类的引用获得父类被隐藏的成员变量。 如何引用呢?

 
  1. Son s1 = new Son();
  2. System.out.println(" s1.name : " + ((Father)s1).name);

执行结果:

 
  1. s1name : Jack

我们将子类对象强转为父类对象,这样就可以拿到父类定义的 name 属性的值了。

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。


开始你的任务吧,祝你成功!

源代码:

/**
 * 任务:计算商品打折后的价格
 */
class Total {
    double totalMoney = 50.00;
    public double getTotalMoney(){
        return totalMoney;
    }
}
// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/
// 定义一个Seal的公开类,并继承Total类
public class Seal extends Total{
    // 定义两个变量,分别代表折扣和总价格,类型为double
    double total;
    double money;
    // 定义一个有参构造方法,带两个参数,依次为折扣和总价格
    public Seal(double total,double money){
        this.total = total;
        this.money = money;
    }
    // 定义一个方法名为sealX的方法,返回类型为double,计算打折后的商品价格并返回
    double sealX(){
        return total*money;
    }
}

/********** End **********/

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第四章 面向对象的概念和 Java 实现-2 回顾 类是具有相同属性和行为的一组对象的 集合 , 对象是类的实例 封装是隐藏对象实现细节的过程,以便不让用户看到实现的细节 类可用Class 来定义,类的变量和方法可被该类的实例访问, 圆点符号用于访问对象的成员,构造函数在创建对象时初始化对象 包可用package 来申明 ,可用import 来导入包 目标 理解继承及其特点 运用JAVA程序实现继承 理解多态及其特点设计 运用JAVA程序实现多态 掌握访问修饰符和方法修饰符 继承 继承的特点 继承的优点 继承JAVA实现 子类构造方法 2-1 子类构造方法 2-2 调用父类构造方法的语法为: super() 或 super(参数列表) ; super () 方法始终指向调用类的父类 调用父类构造方法 演示:示例 3 多态性 2-1 多态性是指¡°多种形式¡± 它使用不同的实例而执行不同操作 多态包括方法重写和方法重载 多态性 2-2 方法重载 2-1 方法重载 2-2 演示:示例 4 方法重写 2-1 方法重写 2-2 访问修饰符 3-1 信息隐藏是 OOP 最重要的功能之一,也是使用访问修饰符的原因 信息隐藏的原因包括: 对任何实现细节所作的更改不会影响使用该类的代码 防止用户意外删除数据 此类易于使用 访问修饰符 3-2 访问修饰符 3-3 访问修饰符可访问性 方法修饰符 static 修饰符 3-1 static修饰符修饰的方法叫静态方法 目的 使该方法独立于类的实例,使用类去访问,而不是类实例,所以也叫类方法 static 修饰符 3-2 调用静态方法的语法为: classname.methodname( ); static 修饰符 3-3 演示:示例 6 final 修饰符 abstract 修饰符 3-1 由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类 抽象方法必须声明在抽象类中 抽象方法语法: abstract type method_name(parameter_list); 声明抽象类语法: abstract class{…… } 使用:父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子类提供这种抽象方 法的实现细节 abstract 修饰符 3-2 抽象类可以具有指向子类对象的对象引用 abstract 修饰符 3-3 演示:示例 7 接口 接口就是某个事物对外提供的一些功能的申明 可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点 使用interface关键字定义接口 一般使用接口声明方法或常量,接口中的方法只能是声明,不能是具体的实现 创建接口的步骤 2-1 // 定义方法的接口 public interface myinterface { public void add(int x, int y); public void volume(int x,int y, int z); } // 定义程序使用的常量的接口 public interface myconstants { public static final double price = 1450.00; public static final int counter = 5; } 创建接口的步骤 2-2 接口使用示例 总结 封装、继承多态是面向对象的主要特征 继承可提高代码的重用性,使用extends关键字来实现。除了构造方法之外,父类的所有 方法和属性都被子类的对象继承 多态性是不同的实例对象以不同的方式对相同的信息作出不同的表现 访问修饰符用于确定访问类成员的方式 Java 常用修饰符有 static、final、abstract 接口是Java编程一项重要的技术,同过它可以实现多态,同时它也弥补了Java单一继承 的不足 . . ----------------------- 《java面向对象程序设计-继承多态》教案全文共5页,当前为第1页。 《java面向对象程序设计-继承多态》教案全文共5页,当前为第2页。 《java面向对象程序设计-继承多态》教案全文共5页,当前为第3页。 《java面向对象程序设计-继承多态》教案全文共5页,当前为第4页。 《java面向对象程序设计-继承多态》教案全文共5页,当前为第5页。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值