Java進階篇(二)——抽象類、內部類


  之前在類和對象中我們說到了類的普通特性,本篇將介紹類的一些高級特性。

一、抽象類

  抽象類:抽象類是只聲明方法的存在而不去具體實現它的類。抽象類不能被實例化,也就是不能創建其對象。使用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 }

  

  以上就是本篇的內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM