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

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

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

1 內(nèi)部類(lèi)概述

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

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

2 特點(diǎn)

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

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

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

4) 在局部位置的內(nèi)部類(lèi)是局部?jī)?nèi)部類(lèi)

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

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

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

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

4 成員內(nèi)部類(lèi)

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

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

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

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

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

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

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

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

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

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

5 局部?jī)?nèi)部類(lèi)

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

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

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

6 匿名內(nèi)部類(lèi)

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

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

package cn.tedu.innerclass;
/*本類(lèi)用于測(cè)試匿名內(nèi)部類(lèi)
* 匿名內(nèi)部類(lèi)沒(méi)有名字,通常與匿名對(duì)象結(jié)合在一起使用*/
public class TestInner5 {
    public static void main(String[] args) {
        //傳統(tǒng)方式:創(chuàng)建接口的實(shí)現(xiàn)類(lèi)+實(shí)現(xiàn)類(lèi)實(shí)現(xiàn)接口中的抽象方法+創(chuàng)建實(shí)現(xiàn)類(lèi)對(duì)象+通過(guò)對(duì)象調(diào)用方法
        //3.創(chuàng)建接口一對(duì)應(yīng)的匿名對(duì)象與匿名內(nèi)部類(lè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)建抽象類(lèi)對(duì)應(yīng)的匿名對(duì)象與匿名內(nèi)部類(lèi)
        new Inter2(){
            @Override
            public void drink() {
                System.out.println("一人飲酒醉");
            }
        }.drink();
        //7.調(diào)用普通類(lèi)的功能怎么調(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)部類(lèi)其實(shí)就充當(dāng)了實(shí)現(xiàn)類(lèi)的角色,去實(shí)現(xiàn)未實(shí)現(xiàn)的抽象方法,只是沒(méi)有名字而已*/
        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)建抽象類(lèi)
abstract class Inter2{
    public void play(){
        System.out.println("Inter2...play()");
    }
    abstract public void drink();
}
//6.創(chuàng)建普通類(lèi)
class Inter3{
    public void study(){
        System.out.println("什么都阻擋不了我想學(xué)習(xí)賺錢(qián)的決心");
    }
    public void powerUp(){
        System.out.println("我們會(huì)越來(lái)越強(qiáng)的!");
    }
}

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

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

相關(guān)文章

最新評(píng)論