1 package com.fu.java4; 2 3 /** 4 * 类的内部成员之五:内部类 5 * 1.Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类 6 * 2.内部类的分类:成员内部类(静态、非静态) VS 局部内部类(方法内、代码块内、构造器内) 7 * 3.成员内部类: 8 * 一方面,作为外部类的成员: 9 * >可以调用外部类的结构 10 * >可以用static修饰 11 * 12 * 另一方面,作为一个类: 13 * >类内可以定义属性、方法、构造器等 14 * >可以被final修饰,表示此类不能被继承。言外之意,不使用final就可以被继承 15 * >可以被abstract修饰 16 * 17 * 4.关注如下3个问题: 18 * 4.1 如何实例化成员内部类的对象 19 * 4.2 如何在成员内部类中区分调用外部类的结构 20 * 4.3 开发中,局部内部类的使用 21 * 22 */ 23 public class InnerClassTest { 24 public static void main(String[] args) { 25 //创建Brain的实例(静态的) 26 Person.Brain brain = new Person.Brain(); 27 //创建Leg的实例(非静态的) 28 // Person.Leg leg = new Person.Leg();//错误的 29 Person p = new Person(); 30 Person.Leg leg = p.new Leg(); 31 leg.display("小腿"); 32 } 33 } 34 35 class Person{ 36 String name = "人"; 37 public void eat(){ 38 39 } 40 41 //静态成员内部类 42 static class Brain{ 43 String name; 44 } 45 //非静态成员内部类 46 class Leg{ 47 String name = "腿"; 48 public void run(){ 49 Person.this.eat();//调用外部类的非静态属性 50 } 51 public void display(String name){ 52 System.out.println(name);//调用形参 53 System.out.println(this.name);//Leg里的属性 54 System.out.println(Person.this.name);//Person里的属性 55 }
1 package com.fu.java4; 2 3 public class InnerClassTest1 { 4 5 //开发中很少见 6 public void method() { 7 //局部内部类 8 class AA { 9 10 } 11 } 12 13 //返回一个实现了Comparable接口的类的对象 14 public Comparable getComparable() { 15 //创建一个实现了Comparable接口的类:局部内部类 16 //方式一 17 // class MyComparable implements Comparable { 18 // @Override 19 // public int compareTo(Object o) { 20 // return 0; 21 // } 22 // } 23 // return new MyComparable(); 24 //方式二 25 return new Comparable() { 26 @Override 27 public int compareTo(Object o) { 28 return 0; 29 } 30 }; 31 } 32 }