成员内部类的访问

1:成员内部类

成员内部类是外部类的成员,必须通过外部类来访问

格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象

package com.imooc;

class Outer{
    public int num = 10;
    class Inner{
        public void method(){
            System.out.println("num = "+num);
        }
    }
}
public class Demo1 {
    public static void main(String[] args){
        Outer.Inner oi = new Outer().new Inner();
        oi.method();
    }
    
}

 一般内部类不能让外部类访问,可以用private修饰

package com.mingming;
class Body{
    private class Heart{
        public void operator(){
            System.out.println("heart");
        }
    }
    public void method(){
        Heart h = new Heart();
        h.operator();
    }
}
public class Demo {
    public static void main(String[] args){
        Body b = new Body();
        b.method();
    }
}

注意:

静态内部类访问的外部类对象必须用静态修饰!!!!(不管使用它里面的静态方法还是非静态方法都能访问外部累得静态成员)
静态内部类(外部类的内部类是静态的类)的方法可以是静态方法也可以是非静态方法

类用静态修饰之后是不能用外部对象访问的

private为了保证数据的安全性
static为了便于访问数据

外部类和内部类同名的时候可以这样访问

package com.mingming;
class Outer{
    public int num = 10;
    class Inner{
        public int num = 20;
        public void show(){
            int num = 30;
            System.out.println(num);
            System.out.println(this.num);
            //通过外部类名限定this对象!!!!!!!!!!!!!
            System.out.println(Outer.this.num);
            
        }
    }
}
public class Demo {
    public static void main(String[] args){
        Outer.Inner oi = new Outer().new Inner();
        oi.show();
    }
}

 2:匿名内部类

package com.mingming;
interface Inter{
    public abstract void show();
    public abstract void show2();
}
class Outer{
    public void method(){
        Inter i = new I
package com.mingming;
interface Inter{
    void show();
}
class Outer{
    public static Inter method(){
        return new Inter(){//不要忘记这里有一对括号!!!!!!!!
            public void show(){
                System.out.println("show");
            }
        };
    }
}
public class Demo {
    public static void main(String[] args){
        Outer.method().show();//不要忘记method后面有一对括号
    }
}


nter() {
            public void show(){
                System.out.println("show");
            }
            public void show2(){
                System.out.println("show2");
            }
        };
        i.show();
        i.show2();
    }
}
public class Demo {
    public static void main(String[] args){
        Outer o = new Outer();
        o.method();
    }
}
原文地址:https://www.cnblogs.com/rain-1/p/5105244.html