面向对象编程


一、继承

1、背景

  代码中创建的类,主要是对现实事物的抽象描述,其中包含属性和方法。但是客观事物之间可能会存在一些联系,那么在代码中类和对象也存在一定的关联。


例如:设计图书类

class Book {
   
    public String title;
    public double price;
    Book(String title,double price){
   
        this.title = title;
        this.price = price;
    }
    public void information(){
   
        System.out.println("【图书】书名:" + this.title + " 价格:" + this.price);
    }
}
class MathBook{
   
    public String title;
    public double price;
    MathBook(String title,double price){
   
        this.title = title;
        this.price = price;
    }
    public void information(){
   
        System.out.println("【数学书】书名:" + this.title + " 价格:" + this.price);
    }
    public void clac(){
   
        System.out.println("数学公式");
    }
}
class EnglishBook{
   
    public String title;
    public double price;
    EnglishBook(String title,double price){
   
        this.title = title;
        this.price = price;
    }
    public void information(){
   
        System.out.println("【数学书】书名:" + this.title + " 价格:" + this.price);
    }
    public void story(){
   
        System.out.println("英语小故事");
    }
}

  通过观察代码可以发现,这些类中有很多重合的部分,这样的代码设计可以说是非常糟糕。那么怎么解决呢?① 从客观角度来讲,无论数学书还是英语书都属于图书;② 数学书类和英语书类中的属性和information()方法完全和图书类中的相同。基于以上两点,可以使用继承解决代码重用的问题

  此时Book被继承的类,称为父类,基类或者超类,对于MathBook和EnglishBook类,称为子类,派生类。子类会继承父类的属性和方法(构造方法除外),以达到代码重用的效果。

  这时我们就会发现另外一个问题:该代码中的属性并没有进行封装,那么封装之后还能进行继承吗?答案是可以的。只是此时虽然被继承了,但是子类不能直接对属性进行访问,需要通过父类中的getter方法进行访问。


2、使用规则

class 子类 extends 父类 {

}

说明:

  ① 关键字extends表示继承,指定要继承的父类;

  ② Java中的一个子类只能继承一个父类;

  ③ 子类若是需要调用父类中的方法,可以使用super关键字得到父类实例的引用,以下是super的三种用法。

super() super.属性 super.方法()
调用父类构造方法,必须放在首行 调用父类成员属性 调用父类方法

例:对图书类的优化

class Book {
   
    public String title;
    public double price;
    Book(String title,double price){
   
        this.title = title;
        this.price = price;
    }
    public void information(){
   
        System.out.println(
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值