类继承
如下代码,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(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(); }
|
方法重写
注意
private
方法不能被重写final
标记的方法不能被重写static
方法不能被重写- 子类重写父类方法时,访问权限不能低于父类的访问权限
- 子类重写父类方法时,返回值类型不能高于父类的返回值类型
- 子类重写父类方法时,抛出的异常不能高于父类的抛出的异常
在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"); } }
|