内部类与外部类的互访
内部类与外部类的互访
五大三粗 发表于3年前
内部类与外部类的互访
  • 发表于 3年前
  • 阅读 10
  • 收藏 0
  • 点赞 0
  • 评论 0

华为云·免费上云实践>>>   

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

 

内部类访问外部类

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

 

具体如下:

 

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

直接访问

 

 

public class Outter { 

    int i = 5; 

    static String string = "Hello"; 

     

    class Inner1{ 

        void Test1 (){ 

            System.out.println(i); 

            System.out.println(string); 

        } 

    } 

}<span style="font-family:Arial,Helvetica,sans-serif"> </span> 

静态内部类的非静态方法

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

 

 

public class Outter { 

    int i = 5; 

    static String string = "Hello"; 

     

    static class Inner2{ 

        void Test1 (){ 

            System.out.println(new Outter().i); 

            System.out.println(string); 

        } 

    } 

静态内部类的静态方法

规则如上

 

 

public class Outter { 

    int i = 5; 

    static String string = "Hello"; 

     

    static class Inner2{ 

        static void Test2 (){ 

            System.out.println(new Outter().i); 

            System.out.println(string); 

        } 

    } 

}<span style="font-family:Arial,Helvetica,sans-serif"> </span> 

 外部类访问内部类

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

 

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

new 内部类对象

 

 

public class Outter { 

    void Test1(){ 

        System.out.println(new Inner1().i); 

    } 

    class Inner1{ 

        int i = 5; 

//      static String string = "Hello";  定义错误! 

    } 

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

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

 

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

 

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

 

 

public class Outter { 

    static void Test2(){ 

        System.out.println(new Outter().new Inner1().i); 

    } 

    class Inner1{ 

        int i = 5; 

//      static String string = "Hello";  定义错误! 

    } 

}<span style="font-family:Arial,Helvetica,sans-serif"> </span> 

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

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

 

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

 

 

public class Outter { 

    void Test1(){ 

        Outter.Inner2 inner2 = new Outter.Inner2(); 

        System.out.println(inner2.i); 

        System.out.println(inner2.string); 

        System.out.println(Outter.Inner2.string); 

    } 

    static class Inner2{ 

        int i = 5; 

        static String string = "Hello";  

    } 

}<span style="font-family:Arial,Helvetica,sans-serif"> </span> 

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

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

 

 

public class Outter { 

    void Test1(){ 

        Outter.Inner1 inner2 = new Outter.Inner1(); 

        System.out.println(inner2.i); 

    } 

    class Inner1{ 

        int i = 5; 

//      static String string = "Hello"; 定义错误! 

    } 

 

匿名内部类

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

 

 

final int k = 6; 

((Button)findViewById(R.id.button2)).setOnClickListener(new OnClickListener() { 

    @Override 

    public void onClick(View v) { 

        // TODO Auto-generated method stub 

        System.out.println(k); 

    } 

});  

共有 人打赏支持
粉丝 151
博文 890
码字总数 4479865
×
五大三粗
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: