在Java中,一個(gè)類(lèi)可以被另一個(gè)類(lèi)繼承。繼承的類(lèi)被稱(chēng)為子類(lèi),被繼承的類(lèi)被稱(chēng)為父類(lèi)。 Java中的類(lèi)繼承機(jī)制比較簡(jiǎn)單,子類(lèi)可以繼承父類(lèi)的屬性和方法,也可以在不影響父類(lèi)的情況下添加自己的屬性和方法。在Java中,父類(lèi)和子類(lèi)的初始化加載是按照一定規(guī)則來(lái)進(jìn)行的。
public class Animal{ int age; String name; public Animal(int age, String name){ this.age = age; this.name = name; } } public class Dog extends Animal{ String color; public Dog(int age, String name, String color){ super(age, name); this.color = color; } }
在這個(gè)例子中,Animal是父類(lèi),Dog是子類(lèi)。子類(lèi)的構(gòu)造方法中使用了super(age,name)方法調(diào)用了父類(lèi)的構(gòu)造方法,并將age和name傳入。在子類(lèi)中,如果沒(méi)有使用super()方法調(diào)用父類(lèi)的構(gòu)造方法,則會(huì)自動(dòng)調(diào)用父類(lèi)的默認(rèn)構(gòu)造方法。在父類(lèi)中,如果沒(méi)有定義構(gòu)造方法,則會(huì)自動(dòng)添加一個(gè)默認(rèn)的構(gòu)造方法。
在Java中,父類(lèi)和子類(lèi)的初始化順序是按照以下規(guī)則:
- 靜態(tài)代碼塊(父類(lèi) ->子類(lèi))
- 父類(lèi)實(shí)例變量初始化
- 父類(lèi)構(gòu)造方法
- 子類(lèi)實(shí)例變量初始化
- 子類(lèi)構(gòu)造方法
這種初始化順序的好處是,可以保證父類(lèi)的初始化在子類(lèi)之前,避免在子類(lèi)中使用父類(lèi)的屬性和方法時(shí),父類(lèi)還沒(méi)有進(jìn)行初始化。
在使用繼承的時(shí)候,需要注意的是,父類(lèi)可以被繼承多次,但一個(gè)類(lèi)只能有一個(gè)父類(lèi)。如果一個(gè)子類(lèi)繼承了多個(gè)父類(lèi),則需要使用接口來(lái)解決這個(gè)問(wèn)題。