欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1 內(nèi)部類概述

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

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

2 特點(diǎn)

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對象進(jìn)行訪問
		//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)象:當(dāng)內(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)資源--鏈?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)資源訪問時不需要創(chuàng)建對象,可以通過類名直接訪問 訪問靜態(tài)類中的靜態(tài)資源可以通過”. . . ”鏈?zhǔn)郊虞d的方式訪問

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)部類對象并且進(jìn)行調(diào)用,才能觸發(fā)內(nèi)部類的功能
		 * */
		//5.創(chuàng)建外部類對象調(diào)用show()
		//7.當(dāng)在外部類show()中創(chuàng)建局部內(nèi)部類對象并且進(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)部類對象
		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)建接口的實(shí)現(xiàn)類+實(shí)現(xiàn)類實(shí)現(xiàn)接口中的抽象方法+創(chuàng)建實(shí)現(xiàn)類對象+通過對象調(diào)用方法
        //3.創(chuàng)建接口一對應(yīng)的匿名對象與匿名內(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)建抽象類對應(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次,所以是兩個匿名對象
        /*如果想要多次使用實(shí)現(xiàn)后的功能,還是要創(chuàng)建普通的對象
        * 匿名對象只能使用一次,一次只能調(diào)用一個功能
        * 匿名內(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("我們會越來越強(qiáng)的!");
    }
}

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

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

相關(guān)文章

最新評論