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

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

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

1 內(nèi)部類概述

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

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

2 特點

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

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

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;
/*本類用作測試內(nèi)部類的入門案例*/
public class TestInner1 {
    public static void main(String[] args) {
        //3.創(chuàng)建內(nèi)部類對象,使用內(nèi)部類的資源
        /*外部類名.內(nèi)部類名 對象名 = 外部類對象.內(nèi)部類對象*/
        Outer.Inner oi = new Outer().new Inner();
        oi.delete();
        System.out.println(oi.sum);
        //4.調(diào)用外部類的方法--這樣是創(chuàng)建了一個外部類的匿名對象,只使用一次
        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.測試外部類如何使用內(nèi)部類的資源
        //System.out.println(sum);--不能直接使用內(nèi)部類的屬性
        //delete();--不能直接調(diào)用內(nèi)部類的方法
        /*外部類如果想要使用內(nèi)部類的資源,必須先創(chuàng)建內(nèi)部類對象
        * 通過內(nèi)部類對象來調(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.測試內(nèi)部類是否可以使用外部類的資源
            /*結(jié)論:內(nèi)部類可以直接使用外部類的資源,私有成員也可以!*/
            System.out.println(name);
            System.out.println(age);
            /*注意:此處測試完畢需要注釋掉,否則來回調(diào)用
            * 會拋出異常StackOverFlowException棧溢出異常*/
            //find();
        }
    }
}

4 成員內(nèi)部類

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

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

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

package cn.tedu.innerclass;
/**本類用來測試成員內(nèi)部類被private修飾*/
public class TestInner2 {
	public static void main(String[] args) {
		/**怎么使用內(nèi)部類Inner2的資源?*/
		//4.創(chuàng)建內(nèi)部類Inner2對象進行訪問
		//Outer2.Inner2 oi = new Outer2().new Inner2();
		//oi.eat();
		/**如果Inner2被private修飾,無法直接創(chuàng)建對象該怎么辦?*/
		//7.創(chuàng)建外部類對象,間接訪問私有內(nèi)部類資源
		new Outer2().getInner2Eat();
	}
}
//1.創(chuàng)建外部類Outer2
class Outer2{
	//6.提供外部類公共的方法,在方法內(nèi)部創(chuàng)建Inner2內(nèi)部類對象,調(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)建對象使用 所以可以創(chuàng)建外部類對象,通過外部類對象間接訪問內(nèi)部類的資源

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

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

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

package cn.tedu.innerclass;
/**本類用來測試成員內(nèi)部類被static修飾*/
public class TestInner3 {
	public static void main(String[] args) {
		/**如何訪問內(nèi)部類的show()?*/
		//4.創(chuàng)建內(nèi)部類對象訪問show()
		//方式一:按照之前的方式,創(chuàng)建內(nèi)部類對象調(diào)用show()
		//Outer3.Inner3 oi = new Outer3().new Inner3();
		//oi.show();
		//方式二:創(chuàng)建匿名內(nèi)部類對象訪問show()
		//new Outer3().new Inner3().show();
		/**現(xiàn)象:當內(nèi)部類被static修飾以后,new Outer3()報錯*/
		//6.用static修飾內(nèi)部類以后,上面的創(chuàng)建語句報錯,注釋掉
		//通過外部類的類名創(chuàng)建內(nèi)部類對象
		Outer3.Inner3 oi = new Outer3.Inner3();
		oi.show();
		//7.匿名的內(nèi)部類對象調(diào)用show()
		new Outer3.Inner3().show();
		//9.訪問靜態(tài)內(nèi)部類中的靜態(tài)資源--鏈式加載
		Outer3.Inner3.show2();
	}
}
//1.創(chuàng)建外部類Outer3
class Outer3{
	//2.創(chuàng)建成員內(nèi)部類Inner3
	//5.內(nèi)部類被static修飾—并不常用!浪費內(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)資源訪問時不需要創(chuàng)建對象,可以通過類名直接訪問 訪問靜態(tài)類中的靜態(tài)資源可以通過”. . . ”鏈式加載的方式訪問

5 局部內(nèi)部類

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

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

package cn.tedu.innerclass;
/**本類用來測試局部內(nèi)部類*/
public class TestInner4 {
	public static void main(String[] args) {
		/**如何使用內(nèi)部類的資源呢?
		 * 注意:直接調(diào)用外部類的show()是無法觸發(fā)內(nèi)部類功能的
		 * 需要再外部類中創(chuàng)建內(nèi)部類對象并且進行調(diào)用,才能觸發(fā)內(nèi)部類的功能
		 * */
		//5.創(chuàng)建外部類對象調(diào)用show()
		//7.當在外部類show()中創(chuàng)建局部內(nèi)部類對象并且進行功能調(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)部類對象
		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;
/*本類用于測試匿名內(nèi)部類
* 匿名內(nèi)部類沒有名字,通常與匿名對象結(jié)合在一起使用*/
public class TestInner5 {
    public static void main(String[] args) {
        //傳統(tǒng)方式:創(chuàng)建接口的實現(xiàn)類+實現(xiàn)類實現(xiàn)接口中的抽象方法+創(chuàng)建實現(xiàn)類對象+通過對象調(diào)用方法
        //3.創(chuàng)建接口一對應(yīng)的匿名對象與匿名內(nèi)部類,并調(diào)用實現(xiàn)了的方法save()
        new Inter1(){
            @Override
            public void save() {
                System.out.println("save()...");
            }
            @Override
            public void get() { }
        }.save();
        //5.創(chuàng)建抽象類對應(yīng)的匿名對象與匿名內(nèi)部類
        new Inter2(){
            @Override
            public void drink() {
                System.out.println("一人飲酒醉");
            }
        }.drink();
        //7.調(diào)用普通類的功能怎么調(diào)用?創(chuàng)建匿名對象直接調(diào)用
        new Inter3().powerUp();
        new Inter3().powerUp();//new了2次,所以是兩個匿名對象
        /*如果想要多次使用實現(xiàn)后的功能,還是要創(chuàng)建普通的對象
        * 匿名對象只能使用一次,一次只能調(diào)用一個功能
        * 匿名內(nèi)部類其實就充當了實現(xiàn)類的角色,去實現(xiàn)未實現(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("我們會越來越強的!");
    }
}

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Java for循環(huán)詳解

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

最新評論

巍山| 赤峰市| 怀化市| 鸡西市| 威远县| 牙克石市| 湖北省| 酒泉市| 汾阳市| 荥阳市| 通江县| 盐源县| 武山县| 明星| 嵊泗县| 宣城市| 社旗县| 灵宝市| 大冶市| 翼城县| 邮箱| 文安县| 靖州| 定边县| 乌兰县| 鹤庆县| 揭东县| 萍乡市| 如东县| 潞城市| 南安市| 洪洞县| 江西省| 汉川市| 通海县| 沂水县| 南陵县| 临漳县| 康定县| 大埔区| 乐安县|