tsx81428 发表于 2022-9-16 17:13:29

内部类.Java学习

今天复习一下Java里面一个比较重要的概念  内部类

 局部内部类


[*]内部类是定义在一个类的内部。通常是在方法中。
[*]本质还是一个类,可以访问外部类的所有成员,包含私有的。
[*]不能使用访问修饰符。但是可以使用final修饰符。
[*]作用域尽在定义它的方法或者代码块中。
[*]外部其他类不能访问局部内部类(因为局部内部类的地位就是衣个局部变量)。
[*]如果外部类和局部类的成员变量重名。遵守就近原则。如果要访问外部类变量。 可以通过 类型.this.成员 去访问。
匿名内部类


[*]该类没有名字。
[*]是一个对象。
[*]定义外部类的局部位置,比如方法中,并且没有类名。(系统底层会分配一个类型)。
[*] 匿名内部类使用一次就没了(生成的对象是可以多次使用)。
[*]匿名内部类是为了简化开发。
 
1 package anonymous;
2
3 public class InnerClass {
4   public static void main(String[] args) {
5         new Test().run();
6   }
7 }
8
9
10 class Test {
11
12   public void run() {
13         Animal dog = new Animal() {
14             @Override
15             public void Say() {
16               System.out.println("小狗汪汪");
17               System.out.println(this.getClass());
18             }
19         };
20         dog.Say();
21   }
22 }
23
24
25 interface Animal {
26   void Say();
27 } 

----------
输出结果。
    小狗汪汪
    class anonymous.Test$1
成员内部类


[*] 定义为的位置是成员位置。
[*]外部其他类可以调用成员内部类。
 
1 package anonymous;
2
3 public class MemberInnerClass {
4   public static void main(String[] args) {
5         Test01 test01 = new Test01();
6         Test01.InnerClass innerClass = test01.new InnerClass();
7         innerClass.Run();
8   }
9 }
10
11 class Test01 {
12
13   class InnerClass {
14         public void Run() {
15             System.out.println("这是成员内部类");
16         }
17   }
18 } 
静态内部类


[*]静态内部类还是定义在成员位置,但是他有static修饰。
[*]可以直接访问外部类的所有静态成员,包括私有的。但是不能直接访问非静态的成员。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 内部类.Java学习