繼承
通過在類之間使用 extends
關鍵字,超類的所有屬性(也稱為父類或基類 )都存在於子類中(也稱為子類或派生類 )
public class BaseClass {
public void baseMethod(){
System.out.println("Doing base class stuff");
}
}
public class SubClass extends BaseClass {
}
SubClass
的例項繼承了 baseMethod()
的方法:
SubClass s = new SubClass();
s.baseMethod(); //Valid, prints "Doing base class stuff"
可以將附加內容新增到子類中。這樣做允許子類中的其他功能,而無需對基類或同一基類的任何其他子類進行任何更改:
public class Subclass2 extends BaseClass {
public void anotherMethod() {
System.out.println("Doing subclass2 stuff");
}
}
Subclass2 s2 = new Subclass2();
s2.baseMethod(); //Still valid , prints "Doing base class stuff"
s2.anotherMethod(); //Also valid, prints "Doing subclass2 stuff"
欄位也是繼承的:
public class BaseClassWithField {
public int x;
}
public class SubClassWithField extends BaseClassWithField {
public SubClassWithField(int x) {
this.x = x; //Can access fields
}
}
private
欄位和方法仍然存在於子類中,但是不可訪問:
public class BaseClassWithPrivateField {
private int x = 5;
public int getX() {
return x;
}
}
public class SubClassInheritsPrivateField extends BaseClassWithPrivateField {
public void printX() {
System.out.println(x); //Illegal, can't access private field x
System.out.println(getX()); //Legal, prints 5
}
}
SubClassInheritsPrivateField s = new SubClassInheritsPrivateField();
int x = s.getX(); //x will have a value of 5.
在 Java 中,每個類最多可以擴充套件一個其他類。
public class A{}
public class B{}
public class ExtendsTwoClasses extends A, B {} //Illegal
這稱為多重繼承,雖然它在某些語言中是合法的,但 Java 不允許它與類一起使用。
因此,每個類都有一個不分支的祖先連鎖類,導致所有類下降。