天天看點

面向對象--繼承、接口

1)繼承

好處:提高代碼的複用性;使類與類之間産生關系密切,有了關系才有多态的特點。

關鍵字:extends

注意:java中隻支援單繼承(隻繼承一個父類),不支援多個繼承(同時繼承多個父類),但是java支援多層繼承(A繼承B,B繼承C,由此可以看出來,A有B的特點也有C的特點),多層繼承時在建立對象時要建立最子類的對象,因為最子類的對象有更多的功能或者說父類對象有可能不能建立對象。

知識點:如果子父類中有同名的變量,在通路子類變量時,this.代表的是通路本類變量,super.代表的是通路父類變量。

如果子父類中有同名的函數時,子類會覆寫掉父類的函數,這種特性叫做重寫。

注意:1、子類覆寫父類時,要保證子類的權限大于等于父類才可行。2、靜态隻能覆寫靜态。

子類的執行個體化過程:

1、子類的所有構造函數,預設都會通路父類中空參數的構造函數。因為子類每一個構造函數内第一行都有一個隐式super();

2、當父類中沒有空參數的構造函數時,子類必須手動通過super語句來通路父類中的構造函數。

3、子類中構造函數的第一行也可以通過this()語句來通路本類中的構造函數。

2)final

final可以修飾類、函數、變量。

被final修飾過的類不可以被繼承。被final修飾過的函數不可以被複寫。被final修飾過的變量是一個常量,隻能逢符值一次。

3)abstract 抽象

1、抽象方法一定在抽象類中

2、抽象方法和抽象類都必須被abstract關鍵字修飾

3、抽象類不可以用new建立對象,因為調用抽象方法沒意義。

4、抽象類中的方法要被調用,必須由子類重寫抽象類中的所有方法,如果隻重寫了部分,這個子類還是抽象類,是不能用的。

abstract class AbstractDemo

{

abstract void speak ();

}

class Abs extends AbstractDemo

{

void speak ()

{

System.out.print("此處寫具體的方法,與抽象類中的方法不一樣的地方");

}

}

4)模闆方法設計模式

在定義功能時,有一部分是确定的,有一部分是不确定的,而确定的部分在使用不确定的部分,那麼這個時候 就将不确定的部分顯露出去,讓子類來完成。

5)接口 interface

interface iner

{

public abstract void show();

}

接口與類相似,但接口内的方法都是抽象的,如果有變量,也必須是final修飾的常量。

特點:

1、接口中常見的成員:常量、抽象方法

2、接口中的成員都有固定的修飾符:

常量:public static final 

抽象方法:public abstract 

接口是不能建立對象的,因為有抽象方法,隻能由子類來實作,用關鍵字:implements 來實作,就可以建立對象了。

知識點:接口可以多實作,并且還可以繼承一下。

class A extends E implements B,C {}

interface A extends E implements B,C {}

接口的特點:

功能的擴充性。  

類與接口的差別:類是描述一類事務的共有屬性,而接口是個别的屬性。也可以說類是系統,是描述一種事物間的關系,而接口不屬于系統内部的特性,接口更多的是屬于系統外的屬性。比如說動物類下有狗科類,狗看家(假設的是所有狗的屬性的話)是這個狗類的共有屬性,捉耗子就是狗這個系統外的屬性。因為隻有個别的狗會捉耗子。