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

java外部類與內(nèi)部類的關(guān)系詳解

 更新時間:2021年12月08日 14:34:54   作者:mayifan_blog  
本文詳細(xì)講解了java外部類與內(nèi)部類的關(guān)系,用代碼演示了外部類調(diào)用內(nèi)部類的方法。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

?private,public,protected,default的訪問權(quán)限區(qū)別

在學(xué)習(xí)外部類與內(nèi)部類之前我們首先要弄明白private,public,protected,default在訪問權(quán)限上有什么不同,這對我們之后的理解會有一定的幫助。

  • 1、private:訪問權(quán)限最低的訪問控制符,被它修飾的變量只能訪問本類的對象。
  • 2、public:訪問權(quán)限最高,不僅是本類,子類,本包,其他的包,都可以去訪問它修飾的對象。
  • 3、default:訪問權(quán)限限制在本類以及本包內(nèi)。
  • 4、protected:訪問的范圍是本類,本包內(nèi),子類,但別的包不可以訪問。

外部類訪問內(nèi)部類

在外部類的main方法中創(chuàng)建了外部類的對象,并通過它創(chuàng)建了內(nèi)部類的對象,并調(diào)用了內(nèi)部類的方法,這里我們觀察調(diào)用時,age變量的變化。

public class People {	
	         private String name;
	         private int age=20;
	         private int ID ;	     	     
	         public static void main(String[] args){
		    	 People p = new People();
		    	 People.Student s = p.new Student();
		    	 s.study();	    	 
	     }	    	
	    class Student {
		    	private String name;
		    	private int age=18;
		    	private int studentNumber;
	    		public void study(){
		    		System.out.println("輸出age"+age);
		    		System.out.println("內(nèi)部類變量"+this.age);
		    		System.out.println("外部類變量"+People.this.age);			    		
	    	}	    	    	
	    }		
}

輸出結(jié)果:

輸出age18、內(nèi)部類變量18、外部類變量20

經(jīng)測試,我們可以發(fā)現(xiàn)內(nèi)部類對象不能直接獲得,只能由外部類的對象獲取。并且我們通過輸出結(jié)果,可以發(fā)現(xiàn)當(dāng)外部類和內(nèi)部類有相同屬性時,在內(nèi)部類中會優(yōu)先輸出內(nèi)部類的屬性,只有通過外部類的對象來調(diào)用age屬性,才會在本例中輸出20。在內(nèi)部類中,使用this,可以獲取內(nèi)部類的屬性。

局部內(nèi)部類

這時候,我們轉(zhuǎn)變一下思路,索性把Student類的創(chuàng)建放在People類的方法里,再看看結(jié)果會怎么樣。

public class People {	
	       private String name;
	       private int age=20;
	       private int ID ;	          
	       public static void main(String[] args){
		       People p = new People();
		       class Student {
			       private String name;
			       private int age=18;
			       private int studentNumber;	    	
		  	       public void study(){
		  	       System.out.println("輸出age"+age);
		               System.out.println("內(nèi)部類變量"+this.age);
		  	       System.out.println("外部類變量"+p.age);			    		
	    	   }	 
	        }
	        new Student().study();
	    }
}

輸出結(jié)構(gòu)和之前是一樣的,這也不奇怪,我們只是把類在方法里定義了,我們可以聯(lián)想到局部變量的定義,只能在本方法中使用,那么,方法內(nèi)的類自然也只是屬于這個方法,訪問權(quán)限只限于方法內(nèi)。

靜態(tài)嵌套類

既然開始了我們就不停下探索的腳步,我們把內(nèi)部類變成靜態(tài)類,我們可以理解為,這個內(nèi)部類現(xiàn)在屬于外部類了,外部類可以通過類名來調(diào)用這個類并創(chuàng)建對象,毫無疑問,結(jié)果是輸出18。

public class People {
	     private String name;
	     private int age=20;
	     private int ID ;	     	     
	     public static void main(String[] args){
		     People p = new People();	    	 
		     new People.Student().study();	    	 
	     }	    	
	    static class Student {
		    private String name;
		    private int age=18;
		    private int studentNumber;
	            public void study(){
			    System.out.println("輸出age"+age);
			    System.out.println("內(nèi)部類變量"+this.age);  			    		
	    	}	    	    	
	    }
}

匿名內(nèi)部類

匿名內(nèi)部類的實現(xiàn)涉及到了抽象類的實現(xiàn),那么什么是抽象類呢?抽象類擁有一系列抽象的屬性或者方法,它本身不能new對象,只有在它被繼承并被重寫所有抽象方法之后才能得到實現(xiàn)。我們這次要通過創(chuàng)建一個匿名內(nèi)部類的對象來使得一個抽象的類得到實體化并執(zhí)行一系列方法。首先我們需要創(chuàng)建一個抽象類,然后再寫一個類創(chuàng)建匿名內(nèi)部類的對象實現(xiàn)抽象類的方法(此處我們沒有用到繼承)。

abstract class People {	
	     private String name;
	     private int age=20;
	     private int ID ;	     	     
	     public abstract void work();    
}
 public class Test{	   	   
	     public static void main(String[] args){	    	  
		     Test t = new Test();
		      t.test(new People(){
		      public void work(){
		      System.out.println("我在工作");
	        	}
	         });
	      }	        
	       public void test(People people){
		         people.work();
		}			
}	

這段代碼的關(guān)鍵部分在:

 t.test(new People(){
		      public void work(){
		      System.out.println("我在工作");
	        	}
	         });

似乎我們new了一個抽象類People的對象,但其實我們通過了匿名內(nèi)部類來實現(xiàn)People類的實例化,它實現(xiàn)了work()抽象方法,然后調(diào)用此方法,輸出“我在工作”。

以上所述是小編給大家介紹的java外部類與內(nèi)部類的關(guān)系詳解,希望對大家有所幫助。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • SpringBoot配置shiro安全框架的實現(xiàn)

    SpringBoot配置shiro安全框架的實現(xiàn)

    這篇文章主要介紹了SpringBoot配置shiro安全框架的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 適用于Java程序員的10道XML面試題 新鮮出爐

    適用于Java程序員的10道XML面試題 新鮮出爐

    這篇文章主要為大家詳細(xì)介紹了Java程序員的10道XML面試題,感興趣的小伙伴們可以參考一下
    2016-07-07
  • idea中Maven鏡像源詳細(xì)配置步驟記錄(對所有項目)

    idea中Maven鏡像源詳細(xì)配置步驟記錄(對所有項目)

    Maven是一個能使我們的java程序開發(fā)節(jié)省時間和精力,是開發(fā)變得相對簡單,還能使開發(fā)規(guī)范化的工具,下面這篇文章主要給大家介紹了關(guān)于idea中Maven鏡像源詳細(xì)配置(對所有項目)的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • java8?stream排序以及自定義比較器方式

    java8?stream排序以及自定義比較器方式

    這篇文章主要介紹了java8?stream排序以及自定義比較器方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 深入淺析Mybatis的缺陷問題

    深入淺析Mybatis的缺陷問題

    Mybatis是業(yè)界非常流行的持久層框架,輕量級、易用,在金融IT領(lǐng)域完全是領(lǐng)軍地位,比Hibernate更受歡迎,優(yōu)勢非常多,也是非常值得我們學(xué)習(xí)的。這篇文章主要介紹了Mybatis的缺陷問題的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • MyBatis-Plus將字段修改為空值的解決方案

    MyBatis-Plus將字段修改為空值的解決方案

    這篇文章主要介紹了MyBatis-Plus將字段修改為空值的解決方案,本文給大家分享三種常用的解決方案,感興趣的朋友一起看看吧
    2023-12-12
  • SpringBoot+Hutool+thymeleaf完成導(dǎo)出Excel的實現(xiàn)方法

    SpringBoot+Hutool+thymeleaf完成導(dǎo)出Excel的實現(xiàn)方法

    這篇文章主要介紹了SpringBoot+Hutool+thymeleaf完成導(dǎo)出Excel,本篇示例當(dāng)中不僅僅有后端,而且還提供了前端html,html當(dāng)中利用js將后端 輸出流直接下載為文件,需要的朋友可以參考下
    2022-03-03
  • springMVC+jersey實現(xiàn)跨服務(wù)器文件上傳

    springMVC+jersey實現(xiàn)跨服務(wù)器文件上傳

    這篇文章主要介紹了springMVC+jersey實現(xiàn)跨服務(wù)器文件上傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • java正則表達(dá)式使用示例

    java正則表達(dá)式使用示例

    這篇文章主要介紹了java正則表達(dá)式使用示例,實現(xiàn)拆分字符串、替換字符串、判斷字符串是否與制定模式匹配等功能,需要的朋友可以參考下
    2014-03-03
  • Spring配置多數(shù)據(jù)源導(dǎo)致事物無法回滾問題

    Spring配置多數(shù)據(jù)源導(dǎo)致事物無法回滾問題

    這篇文章主要介紹了Spring配置多數(shù)據(jù)源導(dǎo)致事物無法回滾問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論