学习时间:
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方法的时候会报错。
关于构造方法不参与继承,可以这样理解,构造方法是用来造唯一的东西的。不能用一个构造方法即造爸爸,又造儿子。
而且就算他继承下去,名字还是和父类相同,和子类不同,也就称不上构造方法了。