繼承
繼承特性
1. 子類擁有父類非private的屬性,方法
2. 子類可以擁有自己的屬性和方法
3. 子類可以用自己的方式實(shí)現(xiàn)父類的方法
4. 單繼承,可以多重繼承
繼承關(guān)鍵字
extends
//父類
class Animal2{
????private String name;
????private int age;
????public Animal2 (String n,int a) {
????????this.name = n;
????????this.age = a;
????}
????public void hello() {
????????System.out.println("你好,我是 "+name);
????}
}
//子類
class Dog2 extends Animal2{ //繼承使用extends關(guān)鍵字
????public Dog2(String n,int a){
????????super(n,a);
????}
}
implements
implements關(guān)鍵字可以變相使Java具有多繼承的特性,使用范圍為類繼承接口的情況,一個(gè)類可以同時(shí)繼承多個(gè)接口
public interface A {
????public void eat();
}
public interface B {? ?
????public void show();
}
public class C implements A,B {
? ? public void eat(){ }
? ? public void show(){}
}
super與this
super關(guān)鍵字用來實(shí)現(xiàn)對(duì)父類成員的訪問,引用當(dāng)前對(duì)象的父類,this關(guān)鍵字指向自己的引用
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 調(diào)用自己的方法? ? ????????super.eat();? // super 調(diào)用父類方法?
????}
}
public class Test {?
????public static void main(String[] args) {
? ? Animal a = new Animal();
? ? a.eat();
? ? Dog d = new Dog();
? ? d.eatTest();
? }
}
final
用final關(guān)鍵字聲明類,該類不能被繼承;聲明方法,該方法不能被子類重寫
若實(shí)例變量被聲明為final,這個(gè)變量就不能被修改。被聲明為final類的方法自動(dòng)被聲明為final,但實(shí)例變量不是final?
構(gòu)造器
子類不能繼承父類的構(gòu)造器,如果父類的構(gòu)造器有參數(shù),必須在子類的構(gòu)造器中顯示的通過super關(guān)鍵字調(diào)用父類構(gòu)造器,并帶有適當(dāng)?shù)膮?shù)列表
public class SuperClass {
private int age;
public SuperClass(int age){
this.age = age;
System.out.println("SuperClass:"+this.age);
}
}
public class SubClass extends SuperClass {
private int age;
public SubClass(int age){
super(5);
this.age = age;
System.out.println("sbuclass:"+this.age);
}
public static void main(String[] args) {
SubClass s = new SubClass(2);
}
}