关于内部类的使用,我们只需要搞懂三个问题就可以了:

    1. 如何实例化内部类中的成员对象
    2. 如何在成员内部类中区分调用外部类的结构
    3. 在我们实际开发当中局部内部类的具体使用 ```java public class InnerClassTest {

    }

    class Person{

    1. }
    2. //静态成员内部类
    3. static class Dog{
    4. }
    5. //非静态成员内部类
    6. class Bird{
    7. }
    8. public void method(){
    9. //局部内部类 方法内
    10. class AA{
    11. }
    12. }
    13. {
    14. //局部内部类 代码块内
    15. class BB{
    16. }
    17. }
    18. public Person(){
    19. //局部内部类 构造器内
    20. class CC{
    21. }
    22. }

    }

    1. 需要注意的事项:<br />1.static的成员内部类中的成员不能声明为static的,只有在外部类或static的成员内部类中才可声明static成员<br />2.外部类访问成员内部类的成员,需要“内部类.成员”或“内部类对象.成员”的方式<br /> 换句话说(内部类是实例不能单独存在,必须依赖于一个外部实例的引用)<br />3.成员内部类可以直接使用外部类的所有成员,包括私有的数据<br />4.当想要在外部类的静态成员部分使用内部类时,可以考虑内部类声明为静态的
    2. ```java
    3. class Person{
    4. static String name = "小明"; //因为这是在外部类里面所以可以声明称static的
    5. int age;
    6. public void eat(){
    7. System.out.println("人:吃饭");
    8. }
    9. public static void f(){
    10. System.out.println("见4. "+new Dog().name);
    11. }
    12. //静态成员内部类
    13. static class Dog{
    14. String name= "卡拉";
    15. int age;
    16. public void show(){
    17. System.out.println("卡拉是条狗");
    18. // 因为eat()不是静态的方法
    19. //! eat();
    20. }
    21. }
    22. //非静态成员内部类
    23. class Bird{
    24. String name = "杜鹃";
    25. public Bird(){}
    26. public void sing(){
    27. System.out.println("我是一只小小鸟");
    28. // 3.成员内部类可以直接使用外部类的所有成员,包括私有的数据
    29. Person.this.eat();//调用外部类的非静态属性
    30. eat();
    31. System.out.println(age); //会被初始化
    32. }
    33. public void display(String name){
    34. System.out.println(name);//方法的形参
    35. System.out.println(this.name);//内部类的属性
    36. System.out.println(Person.this.name);//外部类的属性
    37. // 如果外部类name是static直接Person.name即可
    38. }
    39. }
    40. }
    41. public class InnerClassTest {
    42. public static void main(String[] args) {
    43. //创建Dog实例(静态的成员内部类):
    44. Person.Dog dog = new Person.Dog();
    45. dog.show();
    46. //创建Bird实例(非静态的成员内部类):
    47. //错误的:因为没有外部类对象实例,所以不能这样直接调用
    48. //Person.Bird bird = new Person.Bird();
    49. //创建外部类实例
    50. Person p = new Person();
    51. Person.Bird bird = p.new Bird(); // 2.外部类访问成员内部类的成员,
    52. 需要“内部类.成员”或“内部类对象.成员”的方式
    53. bird.sing();
    54. Person.f(); //4.当想要在外部类的静态成员部分使用内部类时,可以考虑内部类声明为静态的
    55. System.out.println();
    56. bird.display("黄鹂");
    57. }
    58. }
    59. 输出:
    60. 人:吃饭
    61. 人:吃饭
    62. 0
    63. 见4. 卡拉
    64. 黄鹂
    65. 杜鹃
    66. 小明