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 }
1 public void method(){
2 //局部内部类
3 //局部变量
4 int num = 10;
5 class AA{
6 public void show(){
7 // num = 20;//num默认为final的,不能修改
8 System.out.println(num);
9 }
10 }
11 }
此为本人学习笔记,若有错误,请不吝赐教