【Java】内部类与外部类的互访使用小结

来源:互联网 发布:免费售楼软件 编辑:程序博客网 时间:2024/05/01 00:01

转自:


内部类又称为嵌套类,可以把内部类理解为外部类的一个普通成员。

内部类访问外部类

里面的可以自由访问外面的,规则和static一样。(访问非静态时必须先创建对象)

具体如下:

非静态内部类的非静态方法

直接访问

[java] view plain copy
  1. public class Outter {  
  2.     int i = 5;  
  3.     static String string = "Hello";  
  4.       
  5.     class Inner1{  
  6.         void Test1 (){  
  7.             System.out.println(i);  
  8.             System.out.println(string);  
  9.         }  
  10.     }  
  11. }<span style="font-family:Arial,Helvetica,sans-serif"> </span>  

静态内部类的非静态方法

因为静态方法访问非静态外部成员需先创建实例,所以访问i时必须先new外部类。

[java] view plain copy
  1. public class Outter {  
  2.     int i = 5;  
  3.     static String string = "Hello";  
  4.       
  5.     static class Inner2{  
  6.         void Test1 (){  
  7.             System.out.println(new Outter().i);  
  8.             System.out.println(string);  
  9.         }  
  10.     }  
  11. }  

静态内部类的静态方法

规则如上

[java] view plain copy
  1. public class Outter {  
  2.     int i = 5;  
  3.     static String string = "Hello";  
  4.       
  5.     static class Inner2{  
  6.         static void Test2 (){  
  7.             System.out.println(new Outter().i);  
  8.             System.out.println(string);  
  9.         }  
  10.     }  
  11. }<span style="font-family:Arial,Helvetica,sans-serif"> </span>  

 外部类访问内部类

大方向:因为将内部类理解为外部类的一个普通成员,所以外面的访问里面的需先new一个对象。

非静态方法访问非静态内部类的成员:

new 内部类对象

[java] view plain copy
  1. public class Outter {  
  2.     void Test1(){  
  3.         System.out.println(new Inner1().i);  
  4.     }  
  5.     class Inner1{  
  6.         int i = 5;  
  7. //      static String string = "Hello";  定义错误!  
  8.     }  
  9. }  

 静态方法访问非静态内部类的成员

静态方法Test2访问非静态Inner1需先new外部类;

继续访问非静态成员i需先new 内部类

所以访问规则为:new Outter().new Inner1().i

[java] view plain copy
  1. public class Outter {  
  2.     static void Test2(){  
  3.         System.out.println(new Outter().new Inner1().i);  
  4.     }  
  5.     class Inner1{  
  6.         int i = 5;  
  7. //      static String string = "Hello";  定义错误!  
  8.     }  
  9. }<span style="font-family:Arial,Helvetica,sans-serif"> </span>  

非静态方法访问静态内部类的成员

先“外部类.内部类”访问至内部类。

若访问静态成员,则需先new再访问;若访问非静态成员,则可直接访问。

[java] view plain copy
  1. public class Outter {  
  2.     void Test1(){  
  3.         Outter.Inner2 inner2 = new Outter.Inner2();  
  4.         System.out.println(inner2.i);  
  5.         System.out.println(inner2.string);  
  6.         System.out.println(Outter.Inner2.string);  
  7.     }  
  8.     static class Inner2{  
  9.         int i = 5;  
  10.         static String string = "Hello";   
  11.     }  
  12. }<span style="font-family:Arial,Helvetica,sans-serif"> </span>  

非静态方法访问非静态内部类的成员

先“外部类.内部类”访问至内部类,再new即可访问静态成员。

[java] view plain copy
  1. public class Outter {  
  2.     void Test1(){  
  3.         Outter.Inner1 inner2 = new Outter.Inner1();  
  4.         System.out.println(inner2.i);  
  5.     }  
  6.     class Inner1{  
  7.         int i = 5;  
  8. //      static String string = "Hello"; 定义错误!  
  9.     }  
  10. }  
 

匿名内部类

匿名内部类访问外部成员变量时,成员变量前应加final关键字。

[java] view plain copy
  1. final int k = 6;  
  2. ((Button)findViewById(R.id.button2)).setOnClickListener(new OnClickListener() {  
  3.     @Override  
  4.     public void onClick(View v) {  
  5.         // TODO Auto-generated method stub  
  6.         System.out.println(k);  
  7.     }  

  1. });  

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机发热黑屏怎么办 ipadair开不了机怎么办 ipad3开不了机怎么办 ipad电源键失灵怎么办 ipad开关键失灵怎么办 ipadair关不了机怎么办 联想电脑开不了机怎么办 ipad来不了机怎么办 深圳车牌租用怎么办的 电脑连wiwf老掉线怎么办 电脑要设置密码怎么办 苹果笔记本电脑忘记密码怎么办 换了外屏有缝隙怎么办 苹果7屏幕松动怎么办 平板电脑屏幕一直闪怎么办 平板电脑屏幕模糊了怎么办 平板电脑模糊怎么办啊 苹果没有声音了怎么办 微信视频回声怎么办 苹果手机总卡机不动怎么办 苹果手机不掉电怎么办 iphonex屏幕漏液怎么办 苹果6sp充不进电怎么办 iphone6充电越少怎么办 苹果6不能充电怎么办 脸部苹果肌很大怎么办 液晶屏上有划痕怎么办 苹果手机屏幕翘起来怎么办? iphone5s翘屏了怎么办 lpad触屏失灵怎么办 平板一直重启怎么办 苹果平板老死机怎么办 华为屏幕反应慢怎么办 平板屏幕没反应怎么办 iPadmini3触屏了怎么办 联想电脑触摸屏没反应怎么办 电脑触摸屏没反应怎么办 换屏后屏幕乱跳怎么办 联想平板进不去系统怎么办 平板触摸屏坏了怎么办 苹果6触摸不灵敏怎么办