標籤:類的方法 final friend img 中文 列表 shu 靜態 回收機制
1. abstract抽象
什麼是abstract,中文為抽象,從具體事物抽出,概括它們共同的方面,本質屬性與關係等,稱為抽象。看不見,摸不著的東西叫做抽象,抽象是人們對世界萬物的感覺,用特定的映像表達出來,要理解抽象的東西,就必需從內心感受它們。
什麼是抽象類別
抽象類別的定義和使用格式
abstract class 類名{ 類體}
class 類名 extends 抽象類別 { //實現全部抽象方法}
抽象類別,用abstract修飾的類為抽象類別,一個類如果它的所有子類都重寫了這個方法,那麼給它添加抽象的聲明,那麼這個類就為抽象類別。
那麼這個抽象方法的類就為抽象類別,具有抽象方法的類為抽象類別,但抽象類別不一定具有抽象方法,抽象類別中可以有構造方法,不能建立對象。
抽象類別中如果有抽象方法,那麼子類繼承這個抽象類別之後,就必須要重寫抽象類別中的 所有抽象方法。
一個類用abstract進行修飾為抽象類別,那麼這個抽象類別不能在用final來修飾了,抽象類別是類對象的抽象集合,抽象類別使用abstract關鍵字修飾,abstract不能與final並列修飾同一個類。
對於抽象方法,不能在用static和final和private來修飾
在抽象類別中具體抽象的是屬性和行為,在抽象類別中,含有抽象方法的類為抽象類別,一定是抽象類別,但抽象類別中不一定含有抽象方法。
案例:
//抽象類別:作為抽象方法是可以重載的public abstract class Person { public abstract void run();}//子類繼承抽象類別public class Studentone extends Person{ @Override public void run(){ System.out.println("人會跑"); }}//測試public class Test { public static void main(String[] args){ Person person = new Student(); person.run(); }}//結果人會跑
2. 介面什麼是介面(interface)
介面中的方法都是抽象方法,public許可權,全是抽象函數,不能產生對象
interface Student{public void read();public void write();}class ChineseStudent implements Student{//複寫public void read(){ System.out.println("read");}public void write(){ System.out.println("write");}}class Test{public static void main(String args[]){ ChineseStudent chinesestudent = new ChineseStudent(); Student student = chinesestudent; student.read(); student.write();}}
介面的定義和使用格式
interface 介面名 { [public] [static] [final] 變數; [public] [abstract] 方法;}
class 類名 implement 介面列表 { //實現所有介面中聲明的方法}
什麼是介面呢?這個類中所有的方法都是抽象方法。
介面不同抽象,沒有構造方法,介面不是一個類。
介面中也不能建立對象,抽象方法也不能。
在JDK1.8以前,interface來定義介面,通過implements關鍵字讓介面和類產生關係,類實現介面,要重寫介面中的所有抽象方法。
在Java中只有單繼承,多實現,一個類可以繼承一個父類,但一個類可以實現多個介面。
實現介面用implements關鍵字,一個介面可以實現多個介面,一個介面可以繼承多個介面interface Student{public void read();public void write();}interface Teacher{public void teach();public void test();}class Person implements Student,Teacher{public void read(){ System.out.println("read"):}public void write(){ System.out.println("write");}public void teach(){ System.out.println("teach"):}public void test(){ System.out.println("test"):}}
// 測試class Test{public static void main(String args[]){ Person person = new Person(); Student student = person; student.read(); student.write(); Teacher teacher = person; teacher.teach(); teacher.close();}}
介面解決了多繼承的問題,將多繼承的這種機制在java中通過介面實現了,介面與介面之間是繼承的關係。
interface A{ void showa();}interface B{ void showb();}class C implements A,B{ public void showa(){}; public void showb(){};}
介面中的屬性預設是使用public static final修飾的
interface A {void add();}class B implements A { // 介面中的方法預設是使用public修飾void add(){}}
實現多介面,存在方法名一致時,會導致方法重寫的時候產生歧義。
抽象類別和介面比
- 抽象類別是對類抽象,而介面是對行為的抽象。
- 抽象類別為繼承關係,介面為實作類別與介面之間的契約關係。
- 抽象類別為單繼承,介面為多“繼承”。子類只能繼承一個抽象類別,但可實現多個介面。
代碼
//抽象類別abstract class Person { abstract void run(); abstract void jump();}//介面interface School{ void go();}//實現class Student extends Person implements School{ void run(); void jump(); void go();}
抽象類別中成員變數預設為friendly,函數修飾符public,protected,default。
介面屬性為靜態,public static final,成員函數為public。
3. 內部類
內部類的分類:
// 外部類class Demo{ private int num = 3; // 定義內部類 class Int{ void show(){ System.out.println("num="+num); } } void method(){ Int int = new Int(); int.show(); }}class Inner{ public static void main(Stirng[] args){ Demo demo = new Demo(); demo.method(); }}
內部類有 非靜態,靜態,匿名類
文法:
new 外部類().new 內部類()
成員內部類:
在成員變數的位置上定義的類為成員內部類。
如果要使用成員內部類就要使用外部類.內部類來訪問。
靜態內部類:
在成員位置上用static修飾的內部類為靜態內部類。
靜態內部類只能訪問外部類的靜態成員和本內部類的成員;且不能訪問外部類的非靜態成員。
匿名內部類:(對應類的子類或者對應介面的實作類別)
是一種特殊的局部內部類。
訪問外部類中的內部類,非靜態
Outer.Inner int = new Outer().new Innter();
對靜態內部類中的非靜態成員
Outer.Inner int = new Outer().new Innter();
用static聲明的內部類,則內部類變成外部類,用static聲明的內部類不能訪問非static的外部類屬性,外部類的屬性要用static才能訪問。
內部類可以使用外部類所有的方法和變數,就算被私人化也一樣可以,如:
class Outer{ private int x; // 建立內部類的執行個體 Inner inner = new Inner(); public void do(){ // 調用內部類的方法 inner.go(); } // 內部類 class Inner{ void go(){ x = 30; } }}
4. 包
在java中提供了不同的類和介面存放在不同的包中。
常見的包
java.appletjava.awtjava.netjava.utiljava.langjava.awt GUIjava.io 資料轉送java.math 數學運算java.nio 高並發java.net 網路編程java.text 格式化java.sql 和資料庫互動
包的格式:
package 包名[.子包名[…]];
引入java包
import 包階層的類名;
垃圾分代回收機制
垃圾分代回收機制針對堆記憶體,所有記憶體由Java自動分配到回收,垃圾收集器。
結語
- 下面我將繼續對
Java、 Android中的其他知識 深入講解 ,有興趣可以繼續關注
- 小禮物走一走 or 點贊
Java面試集合(六)