关于内部类的使用,我们只需要搞懂三个问题就可以了:
- 如何实例化内部类中的成员对象
- 如何在成员内部类中区分调用外部类的结构
- 在我们实际开发当中局部内部类的具体使用 ```java public class InnerClassTest {
}
class Person{
}//静态成员内部类static class Dog{}//非静态成员内部类class Bird{}public void method(){//局部内部类 方法内class AA{}}{//局部内部类 代码块内class BB{}}public Person(){//局部内部类 构造器内class CC{}}
}
需要注意的事项:<br />1.非static的成员内部类中的成员不能声明为static的,只有在外部类或static的成员内部类中才可声明static成员<br />2.外部类访问成员内部类的成员,需要“内部类.成员”或“内部类对象.成员”的方式<br /> 换句话说(内部类是实例不能单独存在,必须依赖于一个外部实例的引用)<br />3.成员内部类可以直接使用外部类的所有成员,包括私有的数据<br />4.当想要在外部类的静态成员部分使用内部类时,可以考虑内部类声明为静态的```javaclass Person{static String name = "小明"; //因为这是在外部类里面所以可以声明称static的int age;public void eat(){System.out.println("人:吃饭");}public static void f(){System.out.println("见4. "+new Dog().name);}//静态成员内部类static class Dog{String name= "卡拉";int age;public void show(){System.out.println("卡拉是条狗");// 因为eat()不是静态的方法//! eat();}}//非静态成员内部类class Bird{String name = "杜鹃";public Bird(){}public void sing(){System.out.println("我是一只小小鸟");// 3.成员内部类可以直接使用外部类的所有成员,包括私有的数据Person.this.eat();//调用外部类的非静态属性eat();System.out.println(age); //会被初始化}public void display(String name){System.out.println(name);//方法的形参System.out.println(this.name);//内部类的属性System.out.println(Person.this.name);//外部类的属性// 如果外部类name是static直接Person.name即可}}}public class InnerClassTest {public static void main(String[] args) {//创建Dog实例(静态的成员内部类):Person.Dog dog = new Person.Dog();dog.show();//创建Bird实例(非静态的成员内部类)://错误的:因为没有外部类对象实例,所以不能这样直接调用//Person.Bird bird = new Person.Bird();//创建外部类实例Person p = new Person();Person.Bird bird = p.new Bird(); // 2.外部类访问成员内部类的成员,需要“内部类.成员”或“内部类对象.成员”的方式bird.sing();Person.f(); //4.当想要在外部类的静态成员部分使用内部类时,可以考虑内部类声明为静态的System.out.println();bird.display("黄鹂");}}输出:人:吃饭人:吃饭0见4. 卡拉黄鹂杜鹃小明
