java內部類之成員內部類
阿新 • • 發佈:2018-02-16
cte 對象 todo 定義 包括 類屬性 out pri int
內部類概念:顧名思義,就是將一個類定義在另一個個類內部。內部的類稱之為內部類 。
內部類的主要特點:
1.內部類可以很好的實現隱藏,可以使用protected、private修飾符。
2.內部類可以直接訪問外部類的所有成員,包括私有成員。
3.外部類不能直接訪問內部類的成員,必須首先要建立內部類的對象才可以訪問。
4.內部類可以解決一些問題,比如間接地實現繼承。可以避免修改接口而實現同一個類
中兩種同名方法的調用
內部類有四種:
成員內部類,靜態內部類,匿名內部類,局部內部類
起名字時,$符號是合法字符,是為內部類準備的
成員的內部類特點:
1.成員內部類屬於外部類的實例成員,成員內部類可以有public,private,default,
protected權限修飾符。在成員內部類中訪問外部類的成員方法和屬性,要使用“外部
類名.this.成員方法”和“外部類名.this.成員屬性”的形式。
2.創建成員內部類的實例使用“外部類名.內部類名 實例名=外部類實例名.new 內部
類構造方法(參數)”的形式。
成員內部類的限制:
1.成員內部類不能與外部類重名
2.不能在成員內部類中定義static屬性、方法和類(static final形式的乘涼定義除外)因
為一個成員內部類實例必然與一個外部類實例關聯,static成員完全可以移到其外部類
去。
public class MemberInnerClassDemo { public static void main(String[] args) { // TODO Auto-generated method stub Outer1 outer1 = new Outer1(); Outer1.Inner1 inner1 = outer1.new Inner1(); outer1.outer(); inner1.inner(); } } class Outer1{ private String name = "張三"; private int num1 = 1; public void outer() { System.out.println(name+" "+num1); //System.out.println(num2);外部類不能直接訪問內部類成員 Inner1 inner1 = new Inner1();//外部類可以實例化內部類,訪問內部類 inner1.inner(); } class Inner1{//如果內部類聲明為private類型,則外部無法訪問通過外部類內部類 private String name = "李四"; private int num2 = 2; //private static final int num3 = 3;在成員內部類中可以聲明靜態常量 //private static int num3 = 3;在成員內部類中不能聲明靜態成員,包括屬性和方法 public void inner() { System.out.println(name+" "+num2); System.out.println(Outer1.this.name+" "+Outer1.this.num1);//內部類調用外部類屬性 outer();//內部類可以直接訪問外部類的屬性和方法,包括私有的 Outer1.this.outer();//和上面的一樣,區別是如果內部類出現重名,那麽這樣可以解決 } } }
java內部類之成員內部類