天天看點

abstract類_012、Java的抽象方法、接口和String類

1. 抽象方法和抽象類 ·抽象方法

使用abstract修飾的方法,沒有方法體,隻有聲明。定義的是一種“規範”,就是告訴子類必須要給抽象方法提供具體的實作。

·抽象類

包含抽象方法的類就是抽象類。通過abstract方法定義規範,然後要求子類必須定義具體實作。通過抽象類,我們就可以做到嚴格限制子類的設計,使子類之間更加通用。

抽象類和抽象方法的基本用法
abstract類_012、Java的抽象方法、接口和String類
abstract類_012、Java的抽象方法、接口和String類
abstract類_012、Java的抽象方法、接口和String類
抽象類的使用要點:

1. 有抽象方法的類隻能定義成抽象類

2. 抽象類不能執行個體化,即不能用new來執行個體化抽象類。

3. 抽象類可以包含屬性、方法、構造方法。但是構造方法不能用來new執行個體,隻能用來被子類調用。

4. 抽象類隻能用來被繼承。

5. 抽象方法必須被子類實作。

2.接口的詳解 接口的本質

接口本質就是一種契約(規範),它被抽象類更加抽象,接口中所有的方法都是抽象方法(沒有方法體,所有的變量都是常量)。

接口的定義 public interface 接口名稱 extends 父接口1,父接口2...{ //成員變量(常量)--->預設使用public static final修飾的 //方法(抽象方法)--->預設使用public abstract修飾的 } 接口和抽象類的差別

1.抽象類可以包含普通方法,構造方法和非常量的成員變量,而接口中所有的方法都是抽象方法,不能有構造方法,其成員變量為常量。

2.接口中方法預設使用public abstract修飾,成員變量預設使用public static final修飾

3.抽象類不能多繼承,而接口可以

abstract類_012、Java的抽象方法、接口和String類
abstract類_012、Java的抽象方法、接口和String類
abstract類_012、Java的抽象方法、接口和String類
運作效果
abstract類_012、Java的抽象方法、接口和String類
定義接口的詳細說明:

1. 通路修飾符:隻能是public或預設。

2. 接口名:和類名采用相同命名機制。

3. extends:接口可以多繼承。

4. 常量:接口中的屬性隻能是常量,總是:public static final 修飾。不寫也是。

5. 方法:接口中的方法隻能是:public abstract。 省略的話,也是public abstract。

要點

1. 子類通過implements來實作接口中的規範。

2. 接口不能建立執行個體,但是可用于聲明引用變量類型。

3. 一個類實作了接口,必須實作接口中所有的方法,并且這些方法隻能是public的。

4. JDK1.7之前,接口中隻能包含靜态常量、抽象方法,不能有普通屬性、構造方法、普通方法。

5. JDK1.8後,接口中包含普通的靜态方法。

接口的多繼承使用

接口完全支援多繼承。和類的繼承類似,子接口擴充某個父接口,将會獲得父接口中所定義的一切。

public 
           
abstract類_012、Java的抽象方法、接口和String類
3.内部類

一般情況,我們把類定義成獨立的單元。有些情況下,我們把一個類放在另一個類的内部定義,稱為内部類(innerclasses)。

内部類可以使用public、default、protected 、private以及static修飾。而外部頂級類(我們以前接觸的類)隻能使用public和default修飾。

内部類可以通路外部類的成員變量,但外部類不能通路内部的成員變量。

内部類的分類:

Java中内部類主要分為成員内部類(非靜态内部類、靜态内部類)、匿名内部類、局部内部類。

成員内部類(可以使用private、default、protected、public任意進行修飾。 類檔案:外部類$内部類.class) 内部類介紹 非靜态内部類

1. 内部類裡方法的局部變量:變量名。

2. 内部類屬性:this.變量名。

3. 外部類屬性:外部類名.this.變量名。

靜态内部類

靜态内部類的執行個體方法不能直接通路外部類的執行個體方法。靜态内部類看做外部類的一個靜态成員。通過 new 靜态内部類()通路靜态内部類的執行個體。

abstract類_012、Java的抽象方法、接口和String類
abstract類_012、Java的抽象方法、接口和String類
匿名類 文法:
new  
           
abstract類_012、Java的抽象方法、接口和String類
注意

1. 匿名内部類沒有通路修飾符。

2. 匿名内部類沒有構造方法。因為它連名字都沒有那又何來構造方法呢。

局部内部類
abstract類_012、Java的抽象方法、接口和String類
abstract類_012、Java的抽象方法、接口和String類
注意

内部類隻是一個編譯時概念,一旦我們編譯成功,就會成為完全不同的兩個類。對于一個名為Outer的外部類和其内部定義的名為Inner的内部類。編譯完成後會出現Outer.class和Outer$Inner.class兩個類的位元組碼檔案。是以内部類是相對獨立的一種存在,其成員變量/方法名可以和外部類的相同。

内部類的作用:

1. 内部類提供了更好的封裝。隻能讓外部類直接通路,不允許同一個包中的其他類直接通路。

2. 内部類可以直接通路外部類的私有屬性,内部類被當成其外部類的成員。 但外部類不能通路内部類的内部屬性。

3. 接口隻是解決了多重繼承的部分問題,而内部類使得多重繼承的解決方案變得更加完整。

4.String類和常量池

1. String類又稱作不可變字元序列。

2. String位于java.lang包中,Java程式預設導入java.lang包下的所有類。

String類的常用方法
abstract類_012、Java的抽象方法、接口和String類
abstract類_012、Java的抽象方法、接口和String類
常量池 常量池分為三種:全局字元串常量池(String Pool)、class檔案常量池(Class Constant Pool)、運作時常量池(Runtime Constant Pool)
abstract類_012、Java的抽象方法、接口和String類
String 
           
5. 字元串相等的判斷

1. equals方法用來檢測兩個字元串内容是否相等。如果字元串s和t内容相等,則s.equals(t)傳回true,否則傳回false。

2. 要測試兩個字元串除了大小寫差別外是否是相等的,需要使用equalsIgnoreCase方法。

3. 判斷字元串是否相等不要使用"=="。

字元串的比較"=="與equals()方法
abstract類_012、Java的抽象方法、接口和String類
abstract類_012、Java的抽象方法、接口和String類
記憶體分析圖
abstract類_012、Java的抽象方法、接口和String類