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)在静态内部类中可以定义静态成员和实例成员。