参考
菜鸟教程 java
继承
class 父类 {
}
class 子类 extends 父类 {
}
继承的特性:
- 子类拥有父类非private的属性和方法
- 子类可以对父类进行扩展
- 子类可以重写父类的方法
- 使用extends只能单继承,使用implements可以变相的多继承,即一个类继承多个接口,如下。
public interface A {
public void eat();
public void sleep();
}
public interface B {
public void show();
}
public class C implements A,B {
}
- 通过super关键字引用当前对象的父类,通过this关键字引用自身。
class Animal {
void eat() {
System.out.println("animal : eat");
}
}
class Dog extends Animal {
void eat() {
System.out.println("dog : eat");
}
void eatTest() {
this.eat(); // this 调用自己的方法
super.eat(); // super 调用父类方法
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
a.eat();
Dog d = new Dog();
d.eatTest();
}
}
- 使用final关键字修饰的类不能被继承,但类内的属性和方法不是final的。使用final关键字修饰的方法不能被子类重写。
- 子类不继承父类的构造器,只是调用,实例化子类对象时,先调用父类的构造器。若父类构造器有参,则子类构造器中需显式使用super调用父类构造器,若父类构造器无参,则系统自动调用。
/**
* @author wuming
* @date 2023-12-20 13:48
* @description
*/
class SuperClass{
private int n;
SuperClass(){
System.out.println("SuperClass 无参构造");
}
SuperClass(int n){
System.out.println("SuperClass 有参构造" + n);
this.n = n;
}
}
class SubClass extends SuperClass{
private int n;
// 系统自动调用父类的无参构造函数
SubClass(){
System.out.println("SubClass 隐式调用父类无参构造");
}
SubClass(int n){
super(n);
System.out.println("SubClass 显式调用父类有参构造");
this.n = n;
}
}
public class ExtendTest {
public static void main (String args[]){
new SubClass();
new SubClass(200);
}
}
SuperClass 无参构造
SubClass 隐式调用父类无参构造
SuperClass 有参构造200
SubClass 显式调用父类有参构造