你之因此能優於別人,正是由於你堅持了別人所不能堅持的。
本文相關代碼在個人Github,歡迎Star~
https://github.com/zhangzhibo1014/DaBoJava
將一個類的定義放在另外一個類的定義內部,這就是內部類。而包含內部類的類被稱爲外部類git
成員內部類是最普通的一種內部類,成員內部類能夠訪問外部類全部的屬性和方法。可是外部類要訪問成員內部類的屬性和方法,必需要先實例化成員內部類。github
public class Demo { private String name = "Tom"; // 定義一個成員內部類,做爲成員變量 class Student{ private int age = 20; private String name = "Jack"; public void show() { System.out.println("內部類屬性;" + name); System.out.println("內部類屬性:" + age); System.out.println("外部類屬性:" + Demo.this.name); } } public static void main(String[] args) { //聲明一個外部類對象 Demo demo = new Demo(); //聲明一個內部類對象 Student student = demo.new Student(); student.show(); } }
內部類 對象名 = 外部類對象.new 內部類();
this
關鍵字。注:成員內部類不能含有 static
的變量和方法,由於成員內部類須要先建立了外部類,才能建立它本身的微信
靜態內部類一般被稱爲嵌套類。app
靜態內部類是不須要依賴於外部類的,這點和類的靜態成員屬性有點相似,而且它不能使用外部類的非static成員變量或者方法,這點很好理解,由於在沒有外部類的對象的狀況下,能夠建立靜態內部類的對象,若是容許訪問外部類的非static成員就會產生矛盾,由於外部類的非static成員必須依附於具體的對象函數
public class Demo1 { private String name = "static"; private static int id = 2019; static class Student{ int id = 11; public void show() { System.out.println("外部類成員變量:" + (new Demo1().name)); System.out.println("外部類靜態成員:" + Demo1.id); System.out.println("內部類成員變量:" + id); } } public static void main(String[] args) { Student student = new Student(); student.show(); } }
new 外部類().成員
的方式訪問類名.靜態成員
訪問外部類的靜態成員;若是外部類的靜態成員與內部類的成員名稱不相同,則可經過 成員名
直接調用外部類的靜態成員內部類 對象名 = new 內部類();
局部內部類,是指內部類定義在方法和做用域內ui
局部內部類也像別的類同樣進行編譯,但只是做用域不一樣而已,只在該方法或條件的做用域內才能使用,退出這些做用域後沒法引用的。this
/** * 局部內部類 */ public class Demo2 { //將內部類定義在方法中 public void show() { final String name = "Tom"; class Student{ int id = 20; public void show() { System.out.println("外部類方法變量:" + name); System.out.println("內部類屬性變量:" + id); } } Student student = new Student(); student.show(); } //將內部類定義在做用域內 public void display(int num) { if(num > 2) { class Person{ int age = 18; public void show() { System.out.println("age = " + age); } } Person person = new Person(); person.show(); } else { System.out.println("None"); } } public static void main(String[] args) { Demo2 demo2 = new Demo2(); demo2.show(); demo2.display(3); } }
public
、 protected
、 private
以及 static
修飾符的。final
修飾。匿名內部類,顧名思義,就是沒有名字的內部類。正由於沒有名字,因此匿名內部類只能使用一次,它一般用來簡化代碼編寫。但使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個接口設計
/** * 匿名內部類 */ public class Demo3 { public static void main(String[] args) { Demo3 demo3 = new Demo3(); // 匿名內部類 -> 類繼承 new Animal() { public void say() { System.out.println("Say"); } }.say(); // 匿名內部類 -> 接口實現 new Fruit(){ public void eat() { System.out.println("apple"); } }.eat(); } } class Animal{ public void say() { System.out.println("Animal say"); } } interface Fruit{ void eat(); }
new
匿名類,這個類是要先定義的, 若是不先定義,編譯時會報錯該類找不到。咱們能夠根據具體需求來設計和使用內部類。code
相關代碼記錄於GitHub中,歡迎各位夥伴 Star !對象
有任何疑問 微信搜一搜 [程序猿大博] 與我聯繫~
若是以爲對您有所幫助,請 點贊 ,收藏 ,若有不足,請評論或私信指正!謝謝~