之前在類和對象中我們說到了類的普通特性,本篇將介紹類的一些高級特性。
一、抽象類
抽象類:抽象類是只聲明方法的存在而不去具體實現它的類。抽象類不能被實例化,也就是不能創建其對象。使用abstract關鍵字定義抽象類,直接上例子。
下面是一個抽象類的定義,在class前直接加上abstract關鍵字。最后一句“public abstract void voice();”是一個抽象方法,沒有實際意義,必須用子類重寫。需要注意的是,抽象方法只有方法的聲明,而沒有方法的實現,與接口類似,但是用abstract關鍵字修飾的。對於抽象方法前的修飾,不能使用private或static關鍵字。
abstract class Animal { // 定義抽象類 public String animal; // 定義顏色成員變量 public Animal() { // 定義構造方法 animal="bird"; } public abstract void voice(); // 定義抽象方法 }
接下來實現一下抽象方法。方法是在抽象類的子類中通過重寫該方法實現抽象方法。
public class Dog extends Animal { @Override public void voice() { System.out.println("woof..."); } } public class Cat extends Animal { @Override public void voice() { System.out.println("nya..."); } }
二、內部類
內部類:在一個類中再定義一個類,就將在類中再定義的那個類稱為內部類。分為成員內部類、局部內部類以及匿名內部類。比如下方代碼就是成員內部類:
public class OuterClass { // 外部類 private class InnerClass { // 內部類 //... } }
在內部類中可以直接使用外部類的類成員。
1. 局部內部類與成員內部類
而局部內部類是指在類的方法中定義的內部類,作用范圍為整個方法體。這里就不舉例了,其實跟成員變量、局部變量是一個道理,區別在於作用范圍而已。成員內部類同理。
2. 匿名內部類
匿名內部類大量使用於圖形化編程的事件監控器代碼中,可以大大簡化代碼增強可讀性。顧名思義就是沒有名稱的類,可使用默認構造方法來生成匿名內部類的對象。在匿名內部類后需要加分號標識。比如后面在swing編程中,在編寫框體時,對鼠標、鍵盤事件的引入就會用到匿名內部類,寫到那里時再提及。
3. 靜態內部類
靜態內部類為在內部類前添加修飾符static。特點就是不可以使用外部類的非靜態成員。
4. 內部類的繼承
內部類也可以繼承,比如繼承ClassA類中的內部類ClassB,寫作“extends ClassA.ClassB”。但必須硬性給予這個類一個帶參數的構造方法,並且該構造方法的參數為需要繼承內部類的外部類的引用,同時在構造方法體中使用a.super()語句,這樣才為繼承提供了必要的對象引用。下面看一個例子。
1 public class Example extends ClassA.ClassB { // 繼承內部類ClassB 2 public Example(ClassA a) { 3 a.super(); 4 } 5 } 6 class ClassA { 7 class ClassB { 8 } 9 }
以上就是本篇的內容。