避免了對一般類和特殊類之間共同特徵進行的重複描述。
特點:
1,Java不支持多繼承,一個類只能繼承一個父類。但是可以實現多個接口。
2,繼承具有傳遞性。如:C繼承B,B繼承A,那麼C也是可以使用A中的方法的。
3,多重繼承機制,一個類可以被多個不同的類所繼承。即可以有多個子類。
4, 建立子類對象後,要使用的方法中,如果子類有就用子類的,沒有就使用父類中的。
5,繼承中的成員變量:
|-- super(),表示父類的存儲空間引用
|-- 調用父類的成員變量,super.成員變量
6, 繼承中的成員方法
|-- 子類中出現了和父類一模一樣的方法,子類重寫了父類方法 @override 註解:表示重寫
注意:如果父類私有化private 則子類有同名也不叫覆蓋,因爲私有,子類不知道父類有這個
|-- 保證權限大於等於父類的權限
|-- 擴展功能,沿襲父類功能,加入子類自己的新功能 super.父類方法
|-- 如果某個方法不讓其子類複寫,可以在父類方法名前加final關鍵字。
7, 繼承中構造方法
|-- 子類中所有的構造方法,必須先訪問父類中構造方法,java中默認訪問父類空參數的,都有隱藏super();
語句如改爲訪問有參則改爲:super(參數)
子類爲什麼一定要先訪問父類?
因爲子類要用父類裏的數據,所以要先看父類是怎麼初始化的。
注意:子類的構造函數第一行也可以手動通過this()來訪問本類中的構造函數。
子類中至少會有一個構造函數會訪問父類中的構造函數。
注意:super()語句必須寫在子類構造器的第一行。this()也是,但this() 和 super()語句不能同時存在。
8,實例化子例,會遞歸分配所有父類的空間。
好處:
1,減少了代碼的書寫,利用性提高
2,繼承的出現,讓類與類之間產生了關係,多態就是這樣產生的。
心得:
1, 一個子類繼承了一個父類後,子類就可以使用父類的東西,子類自己就可以不用在重寫相同的功能,減少了代碼的書寫。但是也有不好的地方,子類要用父類的東西,在創建子類時會先創建父類對象。這樣可能會加大內存的使用量。
2, 子類也可以覆蓋父類的方法,去改變父類的行爲。
3, 設計模式中的裝飾模式就是繼承的複寫功能來實現的。
例:
要求:1, 實現繼承功能
2, 表現出繼承的特性。
class ExtendsText
{
public static void main(String[] args)
{
B b = new B("123");
b.eat(); //演示覆寫功能
System.out.println("----------------------");
C c = new C();
c.play(); //演示傳遞性
}
}
class A
{
A()
{
System.out.println("構造...AA");
}
A(String s)
{
System.out.println("有參構造...AA...."+s);
}
public void eat()
{
System.out.println("...AA");
}
public void play()
{
System.out.println("A...在玩");
}
}
class B extends A
{
B(String s)
{
//此處隱藏了 super()語句,如沒有super語句也會自動調用super();
//如果想調用父類的有參構造函數,使用 super(參數...)
super(s);
System.out.println("構造...BB");
}
public void eat() //複寫父類的功能
{
System.out.println("......BB,複寫了父類");
}
}
class C extends B
{
C()
{
super("ggh"); // 由於 B 沒有無參構造函數,所以此處必須寫明,否則出錯。
System.out.println("構造...CC");
}
}