面向对象之继承

类继承

如下代码,Boy类继承Person类,Boy类是子类,Person类是父类

1
2
3
4
5
6
7
8
// 父类
public class Person {

}
// 子类
public class Boy extends Person {

}

一个类如果被final关键字修饰,则该类不能被继承

1
2
3
public final class Person {

}

子类必须在构造方法中的第一行显式或隐式调用父类的构造方法,具体分为以下几种情况

  • 如果父类没有带参的构造方法,子类会隐式调用父类的无参构造方法
  • 如果父类只有一个带参的构造方法,子类必须使用super显式调用父类的构造方法
  • 如果父类有多个带参的构造方法,子类选择父类中一个带参的构造方法,使用super调用即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 父类
public class Person {
private String name;

public Person(String name) {
this.name = name;
}
}

// 子类
public class Boy extends Person {
public Boy(String name) {
// super必须在第一行,super之后可以写逻辑
super(name);
}
}

子类的对象可以直接调用父类的方法,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 父类
public class Person {
public void age() {
System.out.println("年龄");
}

public void height() {
System.out.println("身高");
}

public void width() {
System.out.println("体重");
}
}


public static void main(String[] args) {
// 创建子类对象
Boy boy = new Boy();
// 调用父类方法
boy.height();
boy.width();
boy.age();
}

方法重写

注意

  1. private方法不能被重写
  2. final标记的方法不能被重写
  3. static方法不能被重写
  4. 子类重写父类方法时,访问权限不能低于父类的访问权限
  5. 子类重写父类方法时,返回值类型不能高于父类的返回值类型
  6. 子类重写父类方法时,抛出的异常不能高于父类的抛出的异常

Boy类中对Person类的方法重写,重写后的方法会覆盖父类的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Boy extends Person {
@Override
public void age() {
System.out.println("年龄18");
}

@Override
public void height() {
System.out.println("身高180");
}

@Override
public void width() {
System.out.println("体重120");
}
}

  如果想在子类中调用父类的方法,可以使用super关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Boy extends Person {
@Override
public void age() {
super.age();
System.out.println("年龄18");
}

@Override
public void height() {
super.height();
System.out.println("身高180");
}

@Override
public void width() {
super.width();
System.out.println("体重120");
}
}