1 package com.bytezreo.innerclass; 2 3 /** 4 * 5 * @Description 类的内部成员之五:内部类 6 * @author Bytezero·zhenglei! Email:420498246@qq.com 7 * @version 8 * @date 上午8:56:44 9 * @ 1.Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B成为外部类 10 * 11 * 2.内部类的分类:成员内部类(静态,非静态) vs 局部内部类(方法内 代码块内 构造器内) 12 * 13 * 3.成员内部类: 14 * 一方面,作为外部类的成员: 15 * >调用外部类的结构 16 * >可以被 static 修饰 17 * >可以被 四种不同的权限修饰 18 * 19 * 20 * 21 * 另一方面:作为一个类: 22 * >类内可以定义属性,方法,构造器等 23 * >可以用final修饰,表示此类不能被继承,言外之意就是不适用final,可以被继承 24 * >可以被abstract修饰,此类不能被实例化 25 * 26 * 27 * 4.关注如下的 3 个 问题 28 * 4.1 如何实例化成员内部类的对象 29 * 30 * 4.2 如何在成员内部类中区分调用外部类的结构 31 * 32 * 4.3 开发中局部内部类的使用 见 InnerClassTest2.java 33 * 34 * 35 * 36 */ 37 public class InnerClassTest { 38 public static void main(String[] args) { 39 40 //创建内部类的 Dog 的实例化(静态成员内部类): 41 Person.Dog dog = new Person.Dog(); 42 dog.show(); 43 44 //创建内部类的 Bird 的实例化(非静态成员内部类): 45 //Person.Bird bird = new Person.Bird(); //不可以这样 46 Person p =new Person(); 47 Person.Bird bird = p.new Bird(); 48 bird.sing(); 49 bird.display("鹦鹉"); 50 51 } 52 } 53 54 class Person{ 55 56 String name = "外部类----小明"; 57 int age = 12; 58 59 public void eat() { 60 61 System.out.println("人吃饭"); 62 } 63 64 65 66 //静态成员内部类 67 static class Dog{ 68 String name; 69 int age; 70 71 public void show() { 72 System.out.println("忠犬八公"); 73 //eat(); //静态里不允许调用 非静态的方法 74 75 } 76 77 78 79 } 80 81 //非静态成员内部类 82 class Bird{ 83 String name = "内部类----小小鸟"; 84 85 public Bird() { 86 87 } 88 public void sing() { 89 90 System.out.println("我是一个小小鸟"); 91 //调用外部类的方法 92 eat(); //省略了 Person.this.eat(); 93 Person.this.eat(); 94 95 System.out.println(age); //内部类的 96 97 98 99 } 100 101 public void display(String name) { 102 103 System.out.println(name); //方法的形参 104 System.out.println(this.name); //此类的属性--内部类属性 105 System.out.println(Person.this.name); //Person类的属性 --外部类的属性 106 107 } 108 109 110 } 111 112 113 public void method() { 114 115 //局部内部类 116 class AA{ 117 118 119 } 120 121 } 122 123 //代码块内 124 { 125 126 //局部内部类 127 class BB{ 128 129 130 } 131 } 132 133 134 //构造器里面 135 public Person() { 136 //局部内部类 137 class CC{ 138 139 140 } 141 142 } 143 144 145 146 }
package com.bytezreo.innerclass; public class InnerClassTest2 { public void method() { //局部内部类 class AA{ } } //返回一个实现Comparable接口的类的对象 public Comparable getComparable() { // //创建一个实现了Comparable接口的类:局部内部类 // //方式一: // class MyComparable implements Comparable{ // // @Override // public int compareTo(Object o) { // // return 0; // } // // } // // return new MyComparable(); //方式二 return new Comparable() { @Override public int compareTo(Object o) { // TODO Auto-generated method stub return 0; } }; } }