Java 继承
- 继承是子类继承父类的特征和行为,使得子类对象具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为
类的继承格式
class 父类 { } class 子类 extends 父类 { }
- 继承的特性
- 子类拥有父类的非
private
的属性,方法 - 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
- 子类可以用自己的方式实现父类的方法
- Java的继承是单继承,但是可以多重继承,单继承就是子类只能继承一个父类,多重继承就是,A继承B,B继承C
提高了类之间的耦合性
继承关键字
extends
关键字,类的继承是单一继承,一个子类只能拥有一个父类,所以extends
只能继承一个类public class Animal { private String name; private int id; public Animal(String myName, String myId) { // 初始化属性 } public void eat() { // 吃东西方法的具体实现} public void sleep() { //睡觉方法的具体实现} } public class Penguin extends Animal{ }
implements
关键字,使用inplements
关键字可以变相的使Java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口间用逗号分隔)public interface A { public void eat(); public void sleep(); } public interface B { public void show(); } public class C implements A,B { }
super
与this
关键字super
关键字:通过super
关键字实现对父类成员的访问,用来引用当前对象的父类this
关键字:指向自己的引用public class SuperDemo { public static void main(String []args) { new SubClass().showMessage(); } } class SuperClass { int i = 50; } class SuperClass extends SuperClass { int i = 100; public void showMessage { System.out.printf("super.i = %d,this.i = %d\n", super.i, this.i); } }
final
关键字,把类定义为不能继承的,即最终类;修饰方法,该方法不能被子类重写//声明类 final class 类名 {//类体} //声明方法 修饰符(public/private/default/protected) final 返回值类型 方法名() {//方法体} //实例变量也可以被定义为`final`,被定义为`final`的变量不能被修改。被声明为`final`类的方法自动地声明为`final`,但实例变量并不是`final`
构造器
- 子类不能继承父类的构造器,但是父类的构造器带有参数的,则必须在子类的构造器中显示的通过
super
关键字调用父类的构造器并配以适当的参数列表 如果父类有无参构造器,则在子类的构造器中用
super
调用父类构造器不是必须的,如果没有使用super
关键字,系统会自动调用父类的无参构造器class SuperClass { private int n; SuperClass() { System.out.println("SuperClass()"); } SuperClass(int n) { System.out.println("SuperClass(int n)"); this.n = n; } } class SubClass extends SuperClass{ private int n; SubClass() { super(300);// super语句必须是子类构造方法的第一条语句 System.out.println("SubClass"); } public SubClass(int n) { System.out.println("SubClass(int n):" + n); this.n = n; } } public class TestSuperSub { public static void main (String args[]) { SubClass sc = new SubClass(); SubClass sc2 = new SubClass(200); } } // SuperClass(int n) // SubClass // SuperClass() // SubClass(int n):200
*java 中若要在子类中调用父类的方法,需使用关键字
super
class Animal{ void go() { System.out.println("animal go"); } } class Dog extends Animal{ void go() { // 调用父类方法 super.go(); } } //驱动函数 public static void main(String [] args) { Dog dog = new Dog(); dog.go; }