学习时间:

2020-11-27

学习内容

继承

概述:
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。比如,所有人都会有性别,都会吃饭睡觉。那么我们就可以说人类有性别,人类都会吃饭睡觉。

格式:
class 子类名 extends 父类名 {

}  
我们通过extends这个关键字实现类与类的继承
单独的这个类称为父类,基类或者超类;这多个类可以称为子类或者派生类。

特点:
java只支持单继承,不支持多继承。但支持多层继承

注意事项
a:子类只能继承父类所有非私有的成员(成员方法和成员变量)
b:子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。
c:不要为了部分功能而去继承,要继承就继承非私有的全部
继承其实体现的是一种关系:"is a" . 
简单理解是就是。子类是父类的一种。比如,猫类是动物类的一种。

好处
a:提高了代码的复用性
b:提高了代码的维护性
c:让类与类之间产生了关系,是多态的前提

弊端
类的耦合性增强了。++

开发的原则:高内聚,低耦合。
耦合:类与类的关系,简单理解为与别人合作
内聚:就是自己完成某件事情的能力,简单理解为靠自己
高内聚低耦合可以让软件更加健壮,哪怕别的部分坏了,大部分也可以正常运转,而且便于维护

我们通过以下几个案例来演示:

演示
猫类,狗类

分析:
我们现在知道猫和狗都会吃东西,也都要睡觉,他们都有自己的名字。还知道他们都是动物,所以可以抽象出来一个动物类。

public class Test {
    public static void main(String[] args) {
        Cat cat = new Cat();
        Dog dog = new Dog();
        dog.name="旺财";
        dog.eat();
        dog.sleep();
        System.out.println(dog.name);
        cat.name="咪咪";
        cat.eat();
        cat.sleep();
        System.out.println(cat.name);
    }
}
class Cat extends Animal{

}
class Dog extends Animal{
}

class Animal {
    public String name;
    public void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("睡觉");
    }
}

输出

吃饭
睡觉
旺财
吃饭
睡觉
咪咪

这就是一个很简单的继承关系。(为了描述简单,这里没有写逻辑,只是简单的输出。理解就好)

我们再解释一下继承非私有部分的含义

package com.xupt.demo2;

public class Test {
    public static void main(String[] args) {
        Cat cat = new Cat();
        Dog dog = new Dog();
        dog.name="旺财";
        dog.eat();
        dog.sleep();
        System.out.println(dog.name);
        cat.name="咪咪";
        cat.eat();
        cat.sleep();
        System.out.println(cat.name);
    }
}
class Cat extends Animal{

}
class Dog extends Animal{
}

class Animal {
    public String name;
    private void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("睡觉");
    }
}

我们可以看到,将eat方法私有之后,子类便继承不到了,Test类调用eat方法的时候会报错。

关于构造方法不参与继承,可以这样理解,构造方法是用来造唯一的东西的。不能用一个构造方法即造爸爸,又造儿子。
而且就算他继承下去,名字还是和父类相同,和子类不同,也就称不上构造方法了。