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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

(1)內(nèi)部類小結(jié)

2019-11-11 06:08:27
字體:
供稿:網(wǎng)友

InnerClass

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

1、成員內(nèi)部類

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();// 外圍類引用內(nèi)部類格式:outerObject.new InnerClass();		System.out.println("private name is :" + inner.getName());// 內(nèi)部類可以訪問外圍內(nèi)作用域中數(shù)據(jù)		System.out.println("private number is :" + inner.getNumber());		inner.fun();	}}運行結(jié)果:private name is :Estelleprivate number is :0local variable is :3inner variable is :2outer variable is :1hello 

成員內(nèi)部類有以下特性:

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

2、局部內(nèi)部類(Local Inner Class)

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

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) {//局部內(nèi)部類可以訪問外圍類中修飾符為final的局部變量		class TimePrinter implements ActionListener {//局部內(nèi)部類不能被申明為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(); }}

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

3、匿名內(nèi)部類

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;        }    }}匿名內(nèi)部類特性:借用think in java    內(nèi)部類可以用多個實例,每個實例都有自己的狀態(tài)信息,并且與其他外圍對象的信息相互獨立。    在單個外圍類中,可以讓多個內(nèi)部類以不同的方式實現(xiàn)同一個接口,或者繼承同一個類。    創(chuàng)建內(nèi)部類對象的時刻并不依賴于外圍類對象的創(chuàng)建。    內(nèi)部類并沒有令人迷惑的“is-a”關(guān)系,他就是一個獨立的實體。    內(nèi)部類提供了更好的封裝,除了該外圍類,其他類都不能訪問。

4、靜態(tài)內(nèi)部類

        只需要將一個類隱藏到另一類中,不需要內(nèi)部類引用外圍類,則可以使用static Inner Class,俗稱嵌套內(nèi)部類。用static 將內(nèi)部內(nèi)靜態(tài)化,內(nèi)部類就只能訪問外部類的靜態(tài)成員變量,可以直接用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();    } }運行結(jié)果:12


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 沅江市| 会泽县| 汤原县| 八宿县| 广德县| 贵定县| 云霄县| 阳高县| 高安市| 左云县| 宁安市| 永善县| 宿松县| 盈江县| 南平市| 滨州市| 广水市| 开江县| 济阳县| 灯塔市| 牙克石市| 万年县| 福鼎市| 娱乐| 昌黎县| 山西省| 芷江| 嵊州市| 简阳市| 武安市| 韶山市| 峨山| 龙山县| 肃宁县| 南乐县| 垫江县| 吴旗县| 武冈市| 佳木斯市| 静海县| 林西县|