国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

(1)內部類小結

2019-11-14 08:50:49
字體:
來源:轉載
供稿:網友

InnerClass

       內部類:在一個類(外圍類OuterClass)中定義另一個類(內部類InnerClass),借用其他博主的舉例,外圍類是人,人由各個器官組成,如心臟,內部類是心臟,心臟有自己的屬性和方法,同時也可以訪問身體的屬性。InnerClass可以分成四大類:成員內部類、局部內部類、匿名內部類、靜態內部類。

1、成員內部類

package com.yuan.test;public class MerberInnerClass {	/**	 * @param args	 */	PRivate String name;	public int iNumber;	MerberInnerClass(String name, int iNumber) {		this.name = name;		this.iNumber = iNumber;	}	public void fun() {		System.out.println("hello");	}	public class InnerClass {		private int number = 0;		public int iNumber = 2;		public String getName() {			return name;		}		public int getNumber() {			return number;		}		public void fun() {			int iNumber = 3;			System.out.println("local variable is :" + iNumber);			System.out.println("inner variable is :" + this.iNumber);			System.out.println("outer variable is :"					+ MerberInnerClass.this.iNumber);//外圍類域訪問格式:OuterClass.this.field			MerberInnerClass.this.fun();//外圍類方法訪問格式:OuterClass.this.method		}	}	public static void main(String[] args) {		// TODO Auto-generated method stub		MerberInnerClass merber = new MerberInnerClass("Estelle", 1);		MerberInnerClass.InnerClass inner = merber.new InnerClass();// 外圍類引用內部類格式:outerObject.new InnerClass();		System.out.println("private name is :" + inner.getName());// 內部類可以訪問外圍內作用域中數據		System.out.println("private number is :" + inner.getNumber());		inner.fun();	}}運行結果:private name is :Estelleprivate number is :0local variable is :3inner variable is :2outer variable is :1hello 

成員內部類有以下特性:

內部類可以擁有private訪問權限、protected訪問權限、public訪問權限及包訪問權限。外部類只能被public和包訪問兩種權限修飾可訪問外圍類的所有成員屬性和方法成員內部類不存在任何static的變量和方法,個人理解是:成員內部類需訪問外圍類數據,即先有外圍類后有內部類,所以內部類不存在static變量或方法

2、局部內部類(Local Inner Class)

      局部內部類是定義在一個方法或者一個作用域里面的類,它和成員內部類的區別在于局部內部類的訪問僅限于方法內或者該作用域內。

package com.yuan.TalkClock;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Date;import javax.swing.Timer;public class TalkingClock {	public TalkingClock() {		// TODO Auto-generated constructor stub	}	public void start(int interval, final boolean beef) {//局部內部類可以訪問外圍類中修飾符為final的局部變量		class TimePrinter implements ActionListener {//局部內部類不能被申明為private、public			@Override			public void actionPerformed(ActionEvent e) {				// TODO Auto-generated method stub				Date now = new Date();				System.out.println("At the tone:" + now);				if (beef)					Toolkit.getDefaultToolkit().beep();			}		}		ActionListener listener = new TimePrinter();		Timer t = new Timer(interval, listener);		t.start(); }}

局部內部類有以下特性:    局部類不能用public或private訪問修飾符聲明,原因:類修飾符只能為public、private、final,局部變量修飾符只能為final    對同一個包中的其他類隱藏起來    不僅能訪問外部類,也可以訪問被final修飾的局部變量為什么只能訪問final修飾的局部變量?因為內部類代碼實際訪問的是新增構造器傳入外部本地變量值的復制,即在構造其中新增一個特殊字段,在內部類中修改新增字段并不能反饋到鄭重的外部類本地變量中,為了保證修改變量的一致性,選擇final修飾符確保變量同步性

3、匿名內部類

public class OuterClass {    private String name ;    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }        class InnerClass{        public InnerClass(){            name = "chenssy";            age = 23;        }    }}匿名內部類特性:借用think in java    內部類可以用多個實例,每個實例都有自己的狀態信息,并且與其他外圍對象的信息相互獨立。    在單個外圍類中,可以讓多個內部類以不同的方式實現同一個接口,或者繼承同一個類。    創建內部類對象的時刻并不依賴于外圍類對象的創建。    內部類并沒有令人迷惑的“is-a”關系,他就是一個獨立的實體。    內部類提供了更好的封裝,除了該外圍類,其他類都不能訪問。

4、靜態內部類

        只需要將一個類隱藏到另一類中,不需要內部類引用外圍類,則可以使用static Inner Class,俗稱嵌套內部類。用static 將內部內靜態化,內部類就只能訪問外部類的靜態成員變量,可以直接用OuterClass.InnerClass。

package com.yuan.test;public class Out {	/**	 * @param args	 */	private static int age = 12;        public static class In {        public static void print() {            System.out.println(age);        }    }    public static void main(String[] args) {        Out.In in = new Out.In();        in.print();    } }運行結果:12


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 郓城县| 云霄县| 衢州市| 河西区| 江华| 漳州市| 西贡区| 张家港市| 永靖县| 红安县| 福安市| 蛟河市| 西城区| 六枝特区| 会宁县| 阿克陶县| 明溪县| 堆龙德庆县| 安远县| 渭源县| 孟津县| 腾冲县| 阳曲县| 通州市| 龙山县| 英山县| 绍兴市| 石狮市| 连山| 巨野县| 古交市| 濮阳县| 海伦市| 汉沽区| 祁东县| 上虞市| 札达县| 天水市| 长丰县| 桓台县| 中阳县|