Javaoop-面向对象三大特征之一:继承

编译软件:IntelliJ IDEA

一.简单来说,继承就是面向对象编程中的一个重要概念,它允许一个类(子类)从另一个类(父类)中继承属性和方法。这种机制使得子类可以复用父类的代码,并在此基础上扩展或覆盖原有的功能。

那么我们为什么要用继承呢?

  1. 代码复用:通过继承,子类可以重用父类的属性和方法,避免了在每个子类中重复编写相同的代码。这样可以减少开发时间和维护成本。

  2. 模块化设计:通过将通用的属性和行为抽象到一个基类(父类)中,可以更好地组织代码结构,提高程序的可读性和可维护性。

  3. 多态性支持:继承是实现多态性的基础。子类可以覆盖或扩展父类的方法,使得同一消息可以根据接收对象的不同产生不同的行为。

  4. 接口实现:虽然面向对象语言通常也提供接口来实现多态,但有时继承仍然是实现特定接口的一种有效方式。

  5. 层次结构模型:继承可以帮助我们创建反映现实世界中的层级关系的模型,如“动物”是一个通用的概念,而“猫”和“狗”都是更具体的动物类型。

继承的方法也有很多种,如:

  • 单一继承:一个子类只能有一个直接的父类。
  • 抽象基类:不能实例化的类,用于提供通用接口供其他类继承。
  • 混合继承:使用接口和类的组合来实现多重继承的效果。

PS:在Java中不存在多重继承

 二.子类继承父类时使用extend关键字,并且继承是is-a的关系.如:

* public class Dog extends Pet{}
* Dog是一个Pet

①当父类和子类有重名属性时,this.属性的查找顺序是:先在子类中查找,再到父类中找
②如果想要在子类中调用到的是父类的属性,则用super.进行调用
③在Java中所有的类都直接或间接的继承了Object类

大家可能会对super有点陌生,这里我展开说说:

 (1)super代表父类
 (2)super可以调用父类中的属性,方法,构造方法
 (3)supe调用构造方法时必须=写在第一句
 (4)super和this在调用构造方法时,不能同时出现

三.重写:

重写:父类中的方法不能满足子类的需求,就可以在子类中对父类的方法进行重新定义(覆盖),以满足需求.

  •  重写前提:在继承关系中

在继承中,子类方法的声明和父类一致,访问修饰符和父类一样或比父类大,方法的实现(方法体)不一样

这里举个例子:

// 父类:Animal
public class Animal {
    public void speak() {
        System.out.println("动物发出声音");
    }
}

// 子类:Dog
public class Dog extends Animal {
    public void speak() {
        System.out.println("汪汪叫");
    }
}

在这个例子中,我们有一个Animal基类和一个Dog子类。Animal类有一个speak()方法,输出“动物发出声音”。在Dog类中,我们重写了speak()方法,使其输出“汪汪叫”。

当我们通过Animal类型的引用调用speak()方法时,会根据实际创建的对象类型来决定调用哪个版本的方法。这也是多态性的一个体现。

四.抽象:

在一些面向对象编程语言中,可以使用抽象类来创建不能实例化的类,仅作为其他类的基类使用。抽象类通常包含一些抽象方法,这些方法没有实现,需要由其子类去实现。通过这种方式,抽象类定义了必须实现的基本功能,而子类则负责具体的实现细节。

  1. 抽象用abstract修饰,可以修饰类和方法
  2. 抽象类不能实例化,所以可以省略构造方法
  3. 抽象方法没有方法体,可以在子类中进行重写
  4. 抽象方法一定在抽象类中,抽象类中不一定都是抽象方法

抽象的主要目的是简化设计和实现,并提高代码的可复用性。通过分离关注点,我们可以更好地组织代码结构,使代码更易于理解和维护。同时,抽象也是实现多态性的基础,有助于构建灵活、可扩展的软件系统。

在有限的篇幅内,我已尽力将文章撰写到此。若文中存在不足或错误之处,欢迎各位不吝指正。关于继承的基础内容,我大致已经阐述完毕。然而,后续还有更多相关主题等待探讨,例如接口、多态等。我会逐步完善这些内容,以期为大家呈现一个全面而深入的理解。

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值