参考
菜鸟教程 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 显式调用父类有参构造
重写
重写指子类对父类允许子类访问的方法的实现进行重写的过程,重写的函数名、返回值和形参与父类中的方法保持一致,具体功能可自己实现。
- 子类重写的方法的访问权限不能比父类中被重写的方法更低。
- 在异常处理方面,不允许子类抛出比父类方法更宽泛的异常。
- 声明为final、static的方法和构造方法不能被重写。