1. 程式人生 > >Java抽象類和接口

Java抽象類和接口

總結 println 權限 區別 變量 實例 nds 集合 出現

抽象類

  在面向對象的領域一切都是對象,同時所有的對象都是通過類來描述的,但是並不是所有的類都是來描述對象的。 如果一個類沒有足夠的信息來描述一個具體的對象,而需要其他具體的類來支撐它,那麽這樣的類我們稱它為抽象類。

  抽象類被abstract關鍵字修飾的類,由於他是抽象的,也就是存在於意識層面上的類,所以他不能被實例化,實例化的工作應該交由它的子類來完成。

1 abstract class ClassName
2 {
3 }

  抽象類和普通類相比,它除了不能創建對象以外,普通類有的他都有(包括構造方法),除此之外,抽象類還能定義抽象方法。

  抽象方法寫法:修飾符 abstract 返回值類型 函數名(參數列表);


  修飾符只能是protected或者public,抽象方法不能寫方法體,具體的實現方法要交給子類去寫。

 1 abstract class ClassName
 2 {
 3     int num;//默認被protected修飾的成員變量
 4     public String str;//公共的成員變量
 5     public static int nums = 10;//靜態成員變量
 6     public final static int numss = 10;//常量
 7     public ClassName(){
 8         System.out.println("這是一個構造函數。");
9 } 10 abstract void method();//默認被protected修飾的抽象方法 11 public abstract void function();//公共權限的抽象方法 12 }


  抽象類正常情況下需要寫抽象方法(不寫也不會報錯),但不寫的話,那又和普通類又有什麽區別,並且他自己還不能被實例化。所以,它需要被繼承(沒有被繼承也不會報錯),但如果不被繼承,那麽抽象類存在的意義呢。

  子類(如果不是抽象類)必須重寫抽象類中的全部抽象方法。所以,abstract不能與private、static、final或native並列修飾同一個方法。

class
ClassNameSon extends ClassName//繼承上面的抽象函數 { void method(){}//如果子類不是抽象類,就必須重寫父類的抽象函數 public void function(){}//重寫的函數的訪問權限不能低於父類 }

  抽象類總結:抽象類是被用來創建繼承層級裏子類的模板。

接口(interface)

  接口是一些方法特征的集合,這些方法特征來自於具體方法,這些方法符合它們一般來自於一些在系統中不斷出現的方法。一個接口只有方法的特征,而沒有方法的實現,因此這些方法在不同的地方被實現時,可以具有完全不同的行為。

  接口的定義:和類定義不同,定義接口不再使用class關鍵字,而是使用interface關鍵字。

1 interface InterfaceName
2 {
3 }

  接口不是類,他沒有構造函數,也不能被實例化。接口裏只有兩種成員:常量和抽象方法。

  常量寫法規範:public final static [數據類型] 常量名 = value;

  由於總是使用public static/final修飾符,即使定義時不添加public static/final修飾符,系統也會自動加上,所以可以省略它們。

  接口裏的抽象方法和抽象類裏抽象方法的寫法一樣。

  但是由於接口裏只有抽象方法,且它們總是使用public abstract修飾符,即使定義時不添加public abstract修飾符,系統也會自動加上,所以可以省略它們。

 1 interface InterfaceName
 2 {
 3     int num1 = 1;
 4     public int num2 = 1;
 5     public static int num3 = 1;
 6     public final int num4 = 1;
 7     public final static int num5 = 1;//在接口中,上面num1-num4都是num5這個常量寫法的簡寫
 8     
 9     void method1();
10     public void method2();
11     abstract void method3();
12     public abstract void method4();//在接口中,method1-method3都是method4這個方法寫法的簡寫
13 }

  接口總結:接口是實現它的類所需要遵守的規範。

類、抽象類和接口

  1.與抽象類相比,接口的方法都是公共權限的抽象方法,所以它是純用來被繼承、被實現的,否則它將毫無意義。

  2.類之間只能單繼承(抽象類也是類),接口之間可以多繼承。

  3.類可以在繼承一個類的同時實現多個接口(包括一個)。

interface Interface1 extends Interface2,Interface3//繼承了兩個接口,可以繼承多個
{}
interface Interface2{}
interface Interface3{}//空接口

class ClassName//空類
{
}
class ClassNameSon extends ClassName implements Interface2,Interface3//只能繼承一個類,可以實現多個接口,
{
}

  4.抽象類實現接口,可以不重寫接口裏面的抽象方法,但這個抽象類的子類(普通類)必須重寫接口的抽象方法。

  5.可以用子類調用父類(不管多少代)的常量,包括被實現的接口的常量。抽象類和接口可以直接用自己的類名或接口名調用自己的常量。

 1 public class Blog {
 2     public static void main(String[] args) {
 3         System.out.println(TheInterface.str);//接口調用自己的常量
 4         System.out.println(TheAbstract.str);//抽象類名調用接口的常量
 5         System.out.println(ClassName.str);//調用父類接口的常量
 6     }
 7 }
 8 interface TheInterface{
 9     String str = "What happened!";//常量簡寫
10     void method();//抽象方法簡寫
11 }
12 abstract class TheAbstract implements TheInterface{//抽象類可以不重寫父類或被實現接口的抽象方法
13     public void myMethod(){
14     }
15 }
16 class ClassName extends TheAbstract{
17     public void method(){}//父類(包括‘祖宗類’,被implements的接口或祖宗接口)的沒有被重寫的抽象方法都必須重寫
18 }

Java抽象類和接口