最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA內(nèi)部類示例詳解及練習(xí)

 更新時(shí)間:2022年04月07日 10:32:40   作者:程序媛?泡泡  
這篇文章主要為大家詳細(xì)介紹了Java的內(nèi)部類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1 內(nèi)部類概述

如果一個(gè)類存在的意義就是為指定的另一個(gè)類,可以把這個(gè)類放入另一個(gè)類的內(nèi)部。
就是把類定義在類的內(nèi)部的情況就可以形成內(nèi)部類的形式。
A類中又定義了B類,B類就是內(nèi)部類,B類可以當(dāng)做A類的一個(gè)成員看待:

只為A類服務(wù),可以看做是外部類的一個(gè)特殊成員

2 特點(diǎn)

1) 內(nèi)部類可以直接訪問外部類中的成員,包括私有成員

2) 外部類要訪問內(nèi)部類的成員,必須要建立內(nèi)部類的對(duì)象

3) 在成員位置的內(nèi)部類是成員內(nèi)部類

4) 在局部位置的內(nèi)部類是局部內(nèi)部類

3 練習(xí) : 內(nèi)部類入門案例

創(chuàng)建包: cn.tedu.innerclass

創(chuàng)建類: TestInner1.java

package cn.tedu.innerclass;
/*本類用作測(cè)試內(nèi)部類的入門案例*/
public class TestInner1 {
    public static void main(String[] args) {
        //3.創(chuàng)建內(nèi)部類對(duì)象,使用內(nèi)部類的資源
        /*外部類名.內(nèi)部類名 對(duì)象名 = 外部類對(duì)象.內(nèi)部類對(duì)象*/
        Outer.Inner oi = new Outer().new Inner();
        oi.delete();
        System.out.println(oi.sum);
        //4.調(diào)用外部類的方法--這樣是創(chuàng)建了一個(gè)外部類的匿名對(duì)象,只使用一次
        new Outer().find();
    }
}
//1.創(chuàng)建外部類 Outer
class Outer{
    //1.1創(chuàng)建外部類的成員變量
    String name;
    private int age;
    //1.2創(chuàng)建外部類的成員方法
    public void find(){
        System.out.println("Outer...find()");
        //6.測(cè)試外部類如何使用內(nèi)部類的資源
        //System.out.println(sum);--不能直接使用內(nèi)部類的屬性
        //delete();--不能直接調(diào)用內(nèi)部類的方法
        /*外部類如果想要使用內(nèi)部類的資源,必須先創(chuàng)建內(nèi)部類對(duì)象
        * 通過內(nèi)部類對(duì)象來調(diào)用內(nèi)部類的資源*/
        Inner in = new Inner();
        System.out.println(in.sum);
        in.delete();
    }
    //2.創(chuàng)建內(nèi)部類Inner--類的特殊成員
    /*根據(jù)內(nèi)部類位置的不同,分為:成員內(nèi)部類(類里方法外)、局部內(nèi)部類(方法里)*/
    class Inner{
        //2.1定義內(nèi)部類的成員變量
        int sum = 10;
        //2.2定義內(nèi)部類的成員方法
        public void delete(){
            System.out.println("Inner...delete()");
            //5.測(cè)試內(nèi)部類是否可以使用外部類的資源
            /*結(jié)論:內(nèi)部類可以直接使用外部類的資源,私有成員也可以!*/
            System.out.println(name);
            System.out.println(age);
            /*注意:此處測(cè)試完畢需要注釋掉,否則來回調(diào)用
            * 會(huì)拋出異常StackOverFlowException棧溢出異常*/
            //find();
        }
    }
}

4 成員內(nèi)部類

4.1 練習(xí) : 被private修飾

創(chuàng)建包: cn.tedu.innerclass

創(chuàng)建類: TestInner2.java

package cn.tedu.innerclass;
/**本類用來測(cè)試成員內(nèi)部類被private修飾*/
public class TestInner2 {
	public static void main(String[] args) {
		/**怎么使用內(nèi)部類Inner2的資源?*/
		//4.創(chuàng)建內(nèi)部類Inner2對(duì)象進(jìn)行訪問
		//Outer2.Inner2 oi = new Outer2().new Inner2();
		//oi.eat();
		/**如果Inner2被private修飾,無法直接創(chuàng)建對(duì)象該怎么辦?*/
		//7.創(chuàng)建外部類對(duì)象,間接訪問私有內(nèi)部類資源
		new Outer2().getInner2Eat();
	}
}
//1.創(chuàng)建外部類Outer2
class Outer2{
	//6.提供外部類公共的方法,在方法內(nèi)部創(chuàng)建Inner2內(nèi)部類對(duì)象,調(diào)用內(nèi)部類方法
	public void getInner2Eat() {
		Inner2 in = new Inner2();//外部類可以訪問內(nèi)部類的私有成員
		in.eat();
	}
	//2.1創(chuàng)建成員內(nèi)部類Inner2
	/**成員內(nèi)部類的位置:類里方法外*/
	//5.成員內(nèi)部類,被private修飾私有化,無法被外界訪問
	private class Inner2{
		//3.創(chuàng)建內(nèi)部類的普通成員方法
		public void eat() {
			System.out.println("我是Inner2的eat()");
		}
	}
}

總結(jié): 成員內(nèi)部類被Private修飾以后,無法被外界直接創(chuàng)建創(chuàng)建對(duì)象使用 所以可以創(chuàng)建外部類對(duì)象,通過外部類對(duì)象間接訪問內(nèi)部類的資源

4.2 練習(xí) : 被static修飾

創(chuàng)建包: cn.tedu.innerclass

創(chuàng)建類: TestInner3.java

package cn.tedu.innerclass;
/**本類用來測(cè)試成員內(nèi)部類被static修飾*/
public class TestInner3 {
	public static void main(String[] args) {
		/**如何訪問內(nèi)部類的show()?*/
		//4.創(chuàng)建內(nèi)部類對(duì)象訪問show()
		//方式一:按照之前的方式,創(chuàng)建內(nèi)部類對(duì)象調(diào)用show()
		//Outer3.Inner3 oi = new Outer3().new Inner3();
		//oi.show();
		//方式二:創(chuàng)建匿名內(nèi)部類對(duì)象訪問show()
		//new Outer3().new Inner3().show();
		/**現(xiàn)象:當(dāng)內(nèi)部類被static修飾以后,new Outer3()報(bào)錯(cuò)*/
		//6.用static修飾內(nèi)部類以后,上面的創(chuàng)建語句報(bào)錯(cuò),注釋掉
		//通過外部類的類名創(chuàng)建內(nèi)部類對(duì)象
		Outer3.Inner3 oi = new Outer3.Inner3();
		oi.show();
		//7.匿名的內(nèi)部類對(duì)象調(diào)用show()
		new Outer3.Inner3().show();
		//9.訪問靜態(tài)內(nèi)部類中的靜態(tài)資源--鏈?zhǔn)郊虞d
		Outer3.Inner3.show2();
	}
}
//1.創(chuàng)建外部類Outer3
class Outer3{
	//2.創(chuàng)建成員內(nèi)部類Inner3
	//5.內(nèi)部類被static修飾—并不常用!浪費(fèi)內(nèi)存!
	static class Inner3{
		//3.定義成員內(nèi)部類中普通的成員方法
		public void show() {
			System.out.println("我是Inner3類的show()");
		}
		//8.定義成員內(nèi)部類的靜態(tài)成員方法
		static public void show2() {
			System.out.println("我是Inner3的show2()");
		}
	}
}

總結(jié): 靜態(tài)資源訪問時(shí)不需要?jiǎng)?chuàng)建對(duì)象,可以通過類名直接訪問 訪問靜態(tài)類中的靜態(tài)資源可以通過”. . . ”鏈?zhǔn)郊虞d的方式訪問

5 局部內(nèi)部類

創(chuàng)建包: cn.tedu.innerclass

創(chuàng)建類: TestInner4.java

package cn.tedu.innerclass;
/**本類用來測(cè)試局部內(nèi)部類*/
public class TestInner4 {
	public static void main(String[] args) {
		/**如何使用內(nèi)部類的資源呢?
		 * 注意:直接調(diào)用外部類的show()是無法觸發(fā)內(nèi)部類功能的
		 * 需要再外部類中創(chuàng)建內(nèi)部類對(duì)象并且進(jìn)行調(diào)用,才能觸發(fā)內(nèi)部類的功能
		 * */
		//5.創(chuàng)建外部類對(duì)象調(diào)用show()
		//7.當(dāng)在外部類show()中創(chuàng)建局部內(nèi)部類對(duì)象并且進(jìn)行功能調(diào)用后,內(nèi)部類的功能才能被調(diào)用
		new Outer4().show();
	}
}
//1.創(chuàng)建外部類Outer4
class Outer4{
	//2.創(chuàng)建外部類的成員方法
	public void show() {
		//3.創(chuàng)建局部內(nèi)部類Inner4—不太常用!!!
		/**位置:局部內(nèi)部類的位置在方法里*/
		class Inner4{
			//4.創(chuàng)建局部內(nèi)部類的普通屬性與方法
			String name;
			int age;
			public void eat() {
				System.out.println("我是Inner4的eat()");
			}
		}
		/**如何使用局部內(nèi)部類的資源?*/
		//6.在show()里創(chuàng)建內(nèi)部類對(duì)象
		Inner4 in = new Inner4();
		in.eat();
		System.out.println(in.name);
		System.out.println(in.age);
	}
}

6 匿名內(nèi)部類

創(chuàng)建包: cn.tedu.innerclass

創(chuàng)建類: TestInner5.java

package cn.tedu.innerclass;
/*本類用于測(cè)試匿名內(nèi)部類
* 匿名內(nèi)部類沒有名字,通常與匿名對(duì)象結(jié)合在一起使用*/
public class TestInner5 {
    public static void main(String[] args) {
        //傳統(tǒng)方式:創(chuàng)建接口的實(shí)現(xiàn)類+實(shí)現(xiàn)類實(shí)現(xiàn)接口中的抽象方法+創(chuàng)建實(shí)現(xiàn)類對(duì)象+通過對(duì)象調(diào)用方法
        //3.創(chuàng)建接口一對(duì)應(yīng)的匿名對(duì)象與匿名內(nèi)部類,并調(diào)用實(shí)現(xiàn)了的方法save()
        new Inter1(){
            @Override
            public void save() {
                System.out.println("save()...");
            }
            @Override
            public void get() { }
        }.save();
        //5.創(chuàng)建抽象類對(duì)應(yīng)的匿名對(duì)象與匿名內(nèi)部類
        new Inter2(){
            @Override
            public void drink() {
                System.out.println("一人飲酒醉");
            }
        }.drink();
        //7.調(diào)用普通類的功能怎么調(diào)用?創(chuàng)建匿名對(duì)象直接調(diào)用
        new Inter3().powerUp();
        new Inter3().powerUp();//new了2次,所以是兩個(gè)匿名對(duì)象
        /*如果想要多次使用實(shí)現(xiàn)后的功能,還是要?jiǎng)?chuàng)建普通的對(duì)象
        * 匿名對(duì)象只能使用一次,一次只能調(diào)用一個(gè)功能
        * 匿名內(nèi)部類其實(shí)就充當(dāng)了實(shí)現(xiàn)類的角色,去實(shí)現(xiàn)未實(shí)現(xiàn)的抽象方法,只是沒有名字而已*/
        Inter3 in = new Inter3();
        in.study();
        in.study();
        in.study();
        in.study();
        in.study();
        in.study();
    }
}
//1.創(chuàng)建接口
interface Inter1{
    //2.定義接口中的抽象方法
    void save();
    void get();
}
//4.創(chuàng)建抽象類
abstract class Inter2{
    public void play(){
        System.out.println("Inter2...play()");
    }
    abstract public void drink();
}
//6.創(chuàng)建普通類
class Inter3{
    public void study(){
        System.out.println("什么都阻擋不了我想學(xué)習(xí)賺錢的決心");
    }
    public void powerUp(){
        System.out.println("我們會(huì)越來越強(qiáng)的!");
    }
}

總結(jié): 匿名內(nèi)部類屬于局部內(nèi)部類,而且是沒有名字的局部內(nèi)部類,通常和匿名對(duì)象一起使用

以上就是JAVA內(nèi)部類示例詳解及練習(xí)的詳細(xì)內(nèi)容,更多關(guān)于Java內(nèi)部類的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java并發(fā)之ArrayBlockingQueue詳細(xì)介紹

    java并發(fā)之ArrayBlockingQueue詳細(xì)介紹

    這篇文章主要介紹了java并發(fā)之ArrayBlockingQueue詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Java格式化輸出詳細(xì)講解(printf、print、println、format等)

    Java格式化輸出詳細(xì)講解(printf、print、println、format等)

    Java的格式化輸出等同于String.Format,與C有很大的相似,下面這篇文章主要給大家介紹了關(guān)于Java格式化輸出(printf、print、println、format等)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • IDEA如何解決代碼沒有提示問題

    IDEA如何解決代碼沒有提示問題

    文章介紹了如何解決IDEA中代碼提示功能缺失的問題,首先,需要調(diào)整快捷鍵設(shè)置,將CyclicExpandWord鍵映射為Ctrl+/,其次,確保輸入框中設(shè)置為Basic,然后添加鍵盤快捷鍵Alt+/,如果問題依然存在,可能是由于電腦省電模式導(dǎo)致的,需要取消相關(guān)設(shè)置
    2024-11-11
  • Java LinkedHashMap 底層實(shí)現(xiàn)原理分析

    Java LinkedHashMap 底層實(shí)現(xiàn)原理分析

    LinkedHashMap繼承自HashMap實(shí)現(xiàn)了Map接口?;緦?shí)現(xiàn)同HashMap一樣,不同之處在于LinkedHashMap保證了迭代的有序性。其內(nèi)部維護(hù)了一個(gè)雙向鏈表,解決了 HashMap不能隨時(shí)保持遍歷順序和插入順序一致的問題。
    2021-05-05
  • 基于Java中的StringTokenizer類詳解(推薦)

    基于Java中的StringTokenizer類詳解(推薦)

    下面小編就為大家?guī)硪黄贘ava中的StringTokenizer類詳解(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java刪除二叉搜索樹最大元素和最小元素的方法詳解

    Java刪除二叉搜索樹最大元素和最小元素的方法詳解

    這篇文章主要介紹了Java刪除二叉搜索樹最大元素和最小元素的方法,結(jié)合實(shí)例形式詳細(xì)分析了java針對(duì)二叉搜索樹的基本遍歷、查找、判斷、刪除等相關(guān)操作技巧,需要的朋友可以參考下
    2020-03-03
  • 如何處理后臺(tái)向前臺(tái)傳遞的json數(shù)據(jù)

    如何處理后臺(tái)向前臺(tái)傳遞的json數(shù)據(jù)

    這篇文章主要介紹了如何處理后臺(tái)向前臺(tái)傳遞的json數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java實(shí)現(xiàn)簡(jiǎn)單井字棋小游戲代碼實(shí)例

    Java實(shí)現(xiàn)簡(jiǎn)單井字棋小游戲代碼實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)單井字棋小游戲代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • spring-boot使用AOP統(tǒng)一處理日志

    spring-boot使用AOP統(tǒng)一處理日志

    這篇文章主要為大家詳細(xì)介紹了spring-boot使用AOP統(tǒng)一處理日志,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Java for循環(huán)詳解

    Java for循環(huán)詳解

    這篇文章主要介紹了Java for循環(huán)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評(píng)論

镇巴县| 虎林市| 石家庄市| 子长县| 库伦旗| 台江县| 鹤庆县| 镇赉县| 涞源县| 襄城县| 凌云县| 石嘴山市| 山东省| 威海市| 蒙山县| 深泽县| 红桥区| 桂平市| 社会| 得荣县| 察隅县| 治县。| 靖边县| 连江县| 将乐县| 定日县| 纳雍县| 黑河市| 尚志市| 兴安县| 永宁县| 嘉鱼县| 梁河县| 简阳市| 神木县| 庆安县| 宜宾市| 甘德县| 奇台县| 德钦县| 三穗县|