Java核心知识:面向对象-详解继承

概念

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

继承是面向对象三大特征之一。

通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量。

例如,兔子和羊属于食草动物类,狮子和豹属于食肉动物类。
食草动物和食肉动物又是属于动物类。
所以继承需要符合的关系是:is-a,父类更通用,子类更具体。
虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。

继承格式

class 父类 {
}
 
class 子类 extends 父类 {
}

例如:

package base8_class_extends.demo01;

public class MyClass01 {
    public void run() {
        System.out.println("跑步");
    }
}
package base8_class_extends.demo01;

public class MyClass02 extends MyClass01{
}
package base8_class_extends.demo01;

public class Test {
    public static void main(String[] args) {
        MyClass01 myClass01 = new MyClass01();

        MyClass02 myClass02 = new MyClass02();

        myClass01.run();
        myClass02.run();

    }
}

即使MyClass02类没有写run方法,通过继承MyClass01也可以使用。这样就达到了代码复用的效果。

继承类型

Java不支持多重继承,但一个类可以实现多个接口,从而克服单继承的缺点。(后面讲解接口)
在这里插入图片描述

成员变量方法访问

通过子对象访问成员变量和方法:先在子对象中找,没有则向上找。

通过成员方法间接使用成员变量:该方法属于谁,就优先使用谁,没有则向上找。

继承中的构造方法

1.子类构造方法有一个隐含的"super()"调用,所以一定会先调用父类构造方法,再调用子类的。如果子类写了super则使用写的,不写则默认调用父类无参构造方法。

2.子类可以在构造方法里通过super关键字,调用父类的重载构造方法(即父类有多个构造方法)

3.子类通过super调用父类构造方法,必须把super写在子类构造方法的第一句

package base8_class_extends.demo03;

public class Fu {
    // 无参构造方法在没写其他构造方法,默认有赠送
    // 但是一旦写了其他构造方法,将不再赠送,想使用必须显显式写出来
    public Fu() {
        System.out.println("父类无参构造方法");
    }

    public Fu(int i) {
        System.out.println("父类有参构造方法");
    }
}
package base8_class_extends.demo03;

public class Zi extends Fu{
    public Zi() {
        super(1);
        System.out.println("子类构造方法");
    }
}
package base8_class_extends.demo03;

public class InitTest {
    public static void main(String[] args) {
        Zi zi = new Zi();

    }
}

super和this比较

super的使用:

  • 在子类成员方法访问父类的成员变量
  • 在子类成员方法访问父类成员方法
  • 在子类构造方法访问父类构造方法

this的使用:

  • 在本类的成员方法中,访问本类的成员变量
  • 在本类的成员方法中访问本类的另一个成员方法
  • 在本类的构造方法中访问本类的另一个构造方法

继承的特点

1.只能单继承,一个类只能有一个父类

2.父类还可以有父类,父类的父类是间接父类

3.一个子类只有一个直接父类,但是一个父类可以有很多子类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ethan-running

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值