Inheritance[JAVA]

1.什么是继承性

1.1继承体现

  1. 继承(extends)让类与类之间产生关系,子父类关系
  2. Animal是父类,cat和dog都是子类
  3. 书写格式 class cat extends Animal{}

1.2代码体现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
主类
class MainMethod {
public static void main(String[] args) {
dog d = new dog();
d.color = "black";
d.leg = 4 ;
d.eat();
d.sleep();
}
}

动物类
class animals{
String color; //动物的颜色
int leg; //动物腿的个数
public void eat(){ //吃饭的功能
System.out.println("吃饭");
}
public void sleep(){ //睡觉的功能
System.out.println("睡觉");
}
}

狗类
class dog extends animals{
String color;
int leg;
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
}

1.3继承核心

  1. Java只支持单继承,不支持多继承
  2. Java支持多层继承(继承体系)
  3. 子类继承父类就获得了父类所有的属性与方法
  4. 父类的私有结构,子类依然可以继承,只是因为封装性的影响,不能直接调用父类的结构而已
  5. 如果要看这个体系的所有功能用最底层的类创建对象
  6. 如果想看这个体系的共性功能,看最顶层的类

1.3继承利弊

好处
提高了代码的复用性以及维护性,并且让类于类之间产生了关系(多态的前提)

弊端
开发追求高内聚 低耦合,所以类的耦合性增强了
耦合: 类于类的关系 内聚: 就是自己完成某件事情的能力

2.Object类

  1. 一个类若没有声明它的父类,它默认的父类是object类

  2. 所有的java类的默认父类都是object类或间接继承object类

  3. 所有的java类都具有object类中的功能

3.方法重写

3.1核心意义

  1. 子父类出现相同的方法(注意:返回值类型可以是子父类)

  2. 应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法.

3.2注意事项

方法本身

  • 父类中private方法不能被重写
  • 方法的形参列表要一致
  • 子类重写父类方法时,访问权限比父类高/一致

返回值类型

  • 父类方法为void或基本数据类型,子重写方法一样
  • 父类方法为引用数据类型时候,子重写方法一样/这个引用数据类型的子类

后续

  • 子类重写的方法抛出的异常类型,不能大于父类被重写的异常类型
  • 子父类的同名同参数方法,要么声明static的(不是重写),要么声明非static的(考虑重写

4.super关键词

4.1理解

super可以理解为:父类的
super可以调用:属性、方法、构造器

4.2调用属性方法

  1. 在子类的属性或方法中,通常使用super.属性/方法,来显示父类中声明的属性/方法(通常省略不写)

  2. 子类和父类定义同名属性时,需使用super.属性做区分

  3. 子类重写父类中的方法后,如果还想用父类被重写的方法,通过super.方法名调用重写前的方法

注:子类继承父类就是为了使用父类属性,如果定义了同名属性是无意义的

4.3调用构造器

  1. 子类构造器通过super(形参列表)的方式,调用父类声明的指定构造器
  2. 构造器的第一句必须是super(形参列表 )
  3. this(形参列表)或super(形参列表),在构造器中只能二选一
  4. 构造器的首行没有写的话,默认是父类的空参构造器:super()
  5. 类多多个构造器中,至少有一个构造器使用了”super(形参列表)”,去调用父类的构造器

5.子类对象实例化

从结果上来看:(继承性)

  • 子类继承了父类之后,就获得了父类中的属性和方法

  • 创建子类的对象,在堆空间中,就会加载父类中声明的属性

从过程上来看

  • 当我们通过子类的构造器去创建对象地时候,我们一定会直接或简介地去调用父类地构造器,进而调用父类地父类地构造器。。。,直到object类空参构造器为止。

  • 正因为加载了父类地所有结构,所以才可以在内存中有父类地结构,子类对象才能去调用

注:虽然创建子类对象时,调用了父类的构造器,但是自始至终只创建了一个对象,即为new的子类对象。

Inheritance[JAVA]
http://example.com/2022/04/05/Java初级部分/OOP/Inheritance/
Author
John Doe
Posted on
April 5, 2022
Licensed under