JAVA根底之外部類。本站提示廣大學習愛好者:(JAVA根底之外部類)文章只能為提供參考,不一定能成為您想要的結果。以下是JAVA根底之外部類正文
2017-01-13
1、java中的外部類都有什麼?!成員外部類
部分外部類
匿名外部類
靜態外部類
2、外部類詳解 •成員外部類在一個類的外部再創立一個類,成為外部類
1)在一個類中運用外部類,可以在外部類中直接存取所在類的公有屬性或辦法
1 class Outer{ 2 //內部類Outer 3 private int i = 111 ;//內部類公有變量 4 class Inner{ 5 //外部類Inner 6 private int j = 222 ;//外部類公有變量 7 public void print(){ 8 System.out.println("內部類的公有屬性"+ i); 9 System.out.println("外部類的公有屬性"+ j); 10 } 11 } 12 } 13 public class ClassDemo5 { 14 public static void main(String[] args) { 15 Outer o = new Outer() ; 16 Outer.Inner i = o.new Inner() ; 17 i.print() ; 18 } 19 }
2)外部類的實例化辦法
import 面向對象根底.Outer.Inner;
//第一種方式:導入import 面向對象根底.Outer.Inner;包
Outer.Inner i = o.new Inner() ; //第二種方式:內部類.外部類 對象名 = 內部類對象.new 外部類
3)內部類訪問外部類
1 class Fatch{ 2 //內部類Fatch 3 public class Student{ 4 //外部類Student 5 public void show(){ 6 //外部類show()辦法 7 System.out.println("外部類Student的show()辦法"); 8 } 9 } 10 public void print(){ 11 /** 12 * 內部類不可以直接訪問外部類的屬性或辦法, 13 * 必需創立外部類對象才可以訪問 14 */ 15 new Student().show() ; //運用匿名對象實例化調用外部類的類成員 16 System.out.println("內部類Fatch的print()辦法"); 17 } 18 } 19 public class ClassDemo4 { 20 public static void main(String[] args) { 21 Fatch f = new Fatch() ; //實例化內部類對象 22 f.print() ; //調用內部類的print()辦法 23 } 24 }
4)假如內部類和外部類具有相反的成員變量或辦法,外部類默許訪問自己的成員變量或辦法,假如要訪問內部類的成員變量,可以運用 this 關鍵字。
1 class Outer1 { 2 //內部類 3 private int i = 10 ;//內部類公有變量 4 class Inner1{ 5 //外部類 6 private int i = 20 ;//外部類公有變量 7 public void show(){ 8 //外部類辦法 9 System.out.println("外部類的變量"+ this.i );//運用this關鍵字訪問外部類成員 10 System.out.println("內部類的變量"+ Outer1.this.i);//運用內部類名.this.變量名 來訪問內部類成員 11 } 12 } 13 public void print(){ 14 new Inner1().show() ; //調用外部類辦法 15 } 16 } 17 public class ClassDemo6 { 18 public static void main(String[] args) { 19 new Outer1().print() ; 20 } 21 22 }
•留意點:
»實例化外部類之前必需實例化內部類
»外部類可以隨意訪問他的內部類成員,但內部類不可以直接訪問外部類的類成員
»外部類可以被聲明為private 或 protected 權限的訪問
»外部類對象會依賴於內部類對象,除非曾經存在一個內部類對象,否則類中不會呈現外部類對象
•部分外部類(辦法外部類)
外部類不只可以在類中停止定義,也可以在類的部分地位停止定義,例如在類的辦法或許恣意的作用域中都可以定義外部類
1)在內部類的辦法中定義一個辦法外部類
1 class Demo1{ 2 //內部類Demo 3 final int I = 10 ;//內部類定義的常量 4 public void show(){ //內部類的show()辦法 5 class Inne{ //辦法外部類 6 int j = 20 ; //辦法外部類變量 7 private void inshow() { //辦法外部類中的inshow()辦法 8 System.out.println("內部類常量"+ I ); 9 System.out.println("辦法外部類變量"+ j ); 10 } 11 } 12 Inne in = new Inne() ; //實例化外部類對象 13 in.inshow() ; //調用外部類辦法 14 } 15 } 16 public class ClassDemo7 { 17 public static void main(String[] args) { 18 Demo1 d = new Demo1() ; 19 d.show() ; 20 } 21 }
留意:假如辦法中的參數需求被傳遞出來,就必需把參數聲明成final類型
•靜態外部類
假如一個外部類被聲明為static,此外部類就稱為內部類
1)靜態外部類可以經過(new 內部類名.外部類.外部類辦法名) ,來調用靜態外部類辦法
1 class Outer2{ 2 //內部類 3 private static String str = "張博傑" ;//內部類的靜態變量 4 static class Inner2{ 5 //運用static聲明 的靜態外部類 6 public void fun() { 7 //靜態外部類辦法 8 System.out.println("內部類的靜態變量"+" "+ str); 9 } 10 } 11 } 12 public class ClassDemo8 { 13 public static void main(String[] args) { 14 new Outer2.Inner2().fun() ; 15 //靜態外部類可以運用new 內部類名.外部類.外部類辦法名 ,來調用靜態外部類辦法 16 } 17 }
•匿名外部類
匿名外部類也就是沒有名字的外部類,正由於沒有名字,所以匿名外部類只能運用一次,它通常用來簡化代碼編寫.運用匿名外部類還有個前提條件:必需承繼一個父類或完成一個接口
1)匿名外部類的完成
1 abstract class A2 { //籠統類A2 2 public abstract void eat() ; 3 } 4 public class ClassDemo9 { 5 public static void main(String[] args) { 6 /** 7 * 假如A2這個籠統類只用一次,那麼就可一運用匿名外部類來完成 8 */ 9 A2 a = new A2(){ 10 public void eat(){ 11 System.out.println("我要吃飯"); 12 } 13 } ; 14 a.eat() ; 15 } 16 }