内部类

 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     }

 

posted @ 2021-09-29 10:52  橘猫的夏天  阅读(34)  评论(0编辑  收藏  举报