内部类

1.成员内部类

例一

public class Test002 {
    public static void main(String[] args) {
        //1.第一种创建方法
         Cricle c = new Cricle(5);
//        Cricle.Draw d = c.new Draw();
//        d.drawShape();
        //2.第二种,通过方法返回一个内部类对象
        Cricle.Draw d2 = c.getDetDrawInstance();
        d2.drawShape();
    }
}

class Cricle{//外部类
    private double radius = 0;
    public static int count = 1;
    int a = 0;
    
    public Draw getDetDrawInstance() {
        return new Draw();
    }
    
    
    public Cricle(double radius) {
        this.radius = radius;
        //在外部类中访问内部类的成员需要先创建内部类对象
        //new Draw().drawShape();
        
    }
    
    class Draw{//内部类
        public void drawShape() {
            int a = 2;
            System.out.println(radius);//访问外部类的Private成员
            System.out.println(count);//访问外部类的静态成员
            System.out.println(a);//访问内部类里的局部变量
            System.out.println(Cricle.this.a);//访问成员变量
        }
    }
    
}

例二

public class Test003 {

    public static void main(String[] args) {
        Demo d = new Demo(new Outer2());

    }

}
class Outer2{
    Outer2(){
        System.out.println("outer2");
    }
    class Inner2{
        Inner2(){
            System.out.println("Inner2");
        }
    }
}
//继承 实例内部类
class Demo extends Outer2.Inner2{
    Demo(Outer2 o){
        o.super();
        System.out.println("Demo");
    }
}

2.静态内部类

使用static修饰的内部类

1)静态内部类的实例不会自动持有内部类的特定实例的引用,不必创建外部类的实例

2)静态内部类可以直接访问外部类的的静态成员,如果访问外部类的实例成员,必须通过外部类的市里去访问

3)在静态内部类中可以定义静态成员和实例成员。

原文地址:https://www.cnblogs.com/fax1996/p/9457123.html