一》繼承的好處:
1.提高**的復用性。
2.讓類與類之間產生了關係,有了這個關係,才有了多型的特性。
二》如何使用乙個繼承體系中的功能那?
想要使用體系,先查閱體系最父類的描述,因為最父類中定義的是該體系中的共性功能。
通過了解共性功能,就可以知道該體系的基本功能。
那麼這個體系已經可以基本使用了。
三》那麼在具體呼叫時,要建立最子類的物件,為什麼那?
一是因為有可能父類不能建立物件,
二是建立子類物件可以使用更多的功能,包括基本的也包括特有的。
簡單一句話:查閱父類功能,建立子類物件使用功能。
四》物件導向(子父類中變數的特點)
1》變數:(
super
)
如果子類中出現非私有的同名成員變數時,
子類要訪問本類中的同名變數,用this
子類要訪問父類中的同名變數,用super。
2》
super
的使用和
this
的使用幾乎一致。
this代表的是本類物件的引用,
super代表的是父類物件的引用。
3.**體現:
class fu
int num = 4;
class zi extends fu
int num = 5;
void show()
system.out.println(super.num);
class extendsdemo2
public static void main(string args)
zi z = new zi();
z.show();
"..."+z.num);
五》物件導向(子父類中函式的特點-
覆蓋)
一》子父類中函式的特點(覆蓋)
當子類出現和父類一摸一樣的函式時,當子類物件呼叫該函式,會執行子類函式的內容。如同父類的函式被覆蓋一樣。
這種情況是函式的另乙個特性:覆蓋(重寫);
二》當子類繼承父類,沿襲了父類的功能,到子類中。
但是子類雖具備該功能,但是功能的內容卻和父類不一致,
這時,沒有必要定義新功能,而是使用覆蓋的特性,保留父類的功能定義,並重寫功能內容。
三》注意:
子類覆蓋父類,必須保證子類許可權大於等於父類許可權,才可以覆蓋,否則編譯失敗。
靜態只能覆蓋靜態。
六》物件導向(子父類中建構函式的特點,子類例項化過程)
一》子父類建構函式的特點:
1.在對子類物件進行初始化時,父類的建構函式也會執行。
2.那是因為子類的建構函式預設第一行有一條隱式的語句super
();
3.super():會訪問父類中空引數的建構函式,而且子類中所有的建構函式預設第一行都是
super
();
二》為什麼子類一定要訪問父類的建構函式?
因為父類中的資料,子類可以直接獲取,所以子類物件在建立時,需要先檢視父類是如何對這些資料進行初始化的,
所以子類在物件初始化時,要先訪問一下父類中的建構函式,
如果要訪問父類中指定的建構函式,可以通過手動定義super
語句的方式來指定。
三》注意:super
語句一定定義在子類建構函式的第一行。
四》結論:子類的例項化過程。
子類的所有建構函式,預設都會訪問父類中空引數的建構函式,
因為子類每乙個建構函式內第一行都有一句隱式的super
();
當父類中沒有空引數的建構函式時,子類必須手動通過super
語句形式來訪問父類指定的建構函式。
當然:子類的建構函式第一行也可以手動指定this
語句類訪問本類中的建構函式,
子類中至少會有乙個建構函式訪問父類中的建構函式。
七》final關鍵字
一》final
:最終,作為乙個修飾符。
1.可以修飾類,函式,變數。
2.被final
修飾的類不可以被繼承,為了避免被繼承,被子類複寫功能。
比如:封裝好的工具類,只能用,不能繼承。就final
3.被final
修飾的方法不可以被複寫。
比如:父類中有乙個特殊功能的函式,不能被複寫,就final;
4.被final
修飾的變數是乙個常量只能賦值一次,既可以修飾成員變數,也可以修飾區域性變數。
注意:當在描述事物時,一些資料的出現值是固定的,那麼這時為了增強閱讀性,都給這 些值起個名字,方便與閱讀,而這個值不需要改變,所以加上final
修飾。
比如:static final double
π = 3.14
;一般配合
static
用,共享。
內部類定義在類中的區域性位置上時,只能訪問該區域性被final
修飾的區域性變數。
八》抽象類
二》抽象類的特點:
1.抽象方法一定定義在抽象類中。
2.抽象方法和抽象類都必須被abstract
關鍵字修飾。
3.抽象類不可以用new
建立物件,因為呼叫抽象方法沒有意義。
4.抽象類中的抽象方法要被呼叫,必須由子類複寫所有的抽象方法後,建立子類物件呼叫。
如果子類只覆蓋部分抽象方法,那麼該子類還是乙個抽象類。
/*當多個類中出現相同功能,但是功能主體不同,
這時可以進行向上抽取,只抽取功能定義,而不抽取功能主體*/
cabstract lass student
abstract void study();
"study");
class basestudent extends student
void study()
system.out.println("base study");
class advstudent extends student
void study()
system.out.println("adv study");
class abstractdemo
public static void main(string args)
九》介面一》介面:
當介面初期理解,可以認為是乙個特殊的抽象類,
當抽象類中的方法都是抽象的,那麼該類可以通過介面的形式來表現。
class:用於定義類;
inte***ce:用於定義介面;
二》介面定義時,格式特點:
1.介面中常見定義,常量,抽象方法。
2.介面中的成員都有固定修飾符。
常量:public static final
方法:public abstract
三》介面中的成員都是public的。
四》介面是不可以建立物件的,因為有抽象方法,
需要被子類實現,子類對介面中的抽象方法全部覆蓋後,子類才可以例項化。
否則子類是乙個抽象類。
inte***ce inter
public static final int num = 3;
public abstract void show();
class test implements inter
public void show()
class inte***cedemo
public static void main(string args)
test t = new test();
system.out.println(t.num);
system.out.println(test.num);
system.out.println(inter.num);
物件導向 繼承 抽象
抽象類可以繼承多個介面 介面可以繼承多個介面 類只能單繼承抽象類或多重繼承 抽象類不能例項化物件 介面也不能例項化物件 但是都可以通過 繼承抽象類或繼承介面的子類來是例項化物件 employee定義類 package 工資系統 public abstract class employee publi...
物件導向 繼承 介面
一 繼承 子類繼承父類,通過在類後面加冒號來繼承某個類 一旦形成繼承關係後,子類的物件就能夠使用父類中的公共屬性和方法函式 子類能夠轉換成父類,但父類不一定能夠轉成子類 只有當父類物件是由某個子類物件轉換來的時候,才能再把父類物件轉換回去,從哪個子類來的,就只能再轉回那個子類去 直接通過父類的建構函...
java 物件導向 介面 抽象
乙個物件例項化過程 person p new person 1,jvm會讀取指定的路徑下的person.class檔案,並載入進記憶體,並會先載入person的父類 如果有直接的父類的情況下 2,在堆記憶體中的開闢空間,分配位址。3,並在物件空間中,對物件中的屬性進行預設初始化。4,呼叫對應的建構函...