java9-6 内部类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java9-6 内部类相关的知识,希望对你有一定的参考价值。

1、 内部类概述:
    把类定义在其他类的内部,这个类就被称为内部类。
    举例:在类A中定义了一个类B,类B就是内部类。

内部的访问特点:
    A:内部类可以直接访问外部类的成员,包括私有。
    B:外部类要访问内部类的成员,必须创建对象。

class Outer {
private int num = 10;

class Inner {
public void show() {
System.out.println(num);
}
}

public void method() {
//找不到符号
//show();

Inner i = new Inner();
i.show();
}

}

class InnerClassDemo {
public static void main(String[] args) {

}
}

 

2、 内部类位置
    成员位置:在成员位置定义的类,被称为成员内部类。
    局部位置:在局部位置定义的类,被称为局部内部类。


    成员位置:在成员位置定义的类,被称为成员内部类。

 1 class Outer {
 2 private int num = 10;
 3 
 4 //成员位置 类里方法外?
 5 /*
 6 class Inner {
 7 
 8 }
 9 */
10 public void method() {
11 //局部位置 类里方法内?
12 class Inner {
13 
14 }
15 }
16 }
17 
18 class InnerClassDemo2 {
19 public static void main(String[] args) {
20 
21 }
22 }

 

3、 成员内部类:
      如何直接访问内部类的成员。
      外部类名.内部类名 对象名 = 外部类对象.内部类对象;

 1 class Outer {
 2 private int num = 10;
 3 
 4 class Inner {
 5 public void show() {
 6 System.out.println(num);
 7 }
 8 }
 9 }
10 
11 class InnerClassDemo3 {
12 public static void main(String[] args) {
13 //需求:我要访问Inner类的show()方法
14 //Inner i = new Inner();
15 //i.show();
16 
17 //格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
18 Outer.Inner oi = new Outer().new Inner();
19 oi.show();
20 }
21 }

 

面试题:
    要求请填空分别输出30,20,10。

 1 class Outer {
 2   public int num = 10;
 3 class Inner {
 4   public int num = 20;
 5   public void show() {
 6     int num = 30;
 7       System.out.println(XX);
 8       System.out.println(XX);
 9       System.out.println(XX);
10     }
11     }
12 }

 

 

 1 答案:
 2 class Outer {
 3   public int num = 10;
 4 class Inner {
 5   public int num = 20;
 6   public void show() {
 7   int num = 30;
 8       System.out.println(num);
 9       System.out.println(this.num);
10       //System.out.println(new Outer().num);
11       System.out.println(Outer.this.num); //限定了this.num的范围
12 }
13 }
14 }
15 class InnerClassTest {
16     public static void main(String[] args) {
17         Outer.Inner oi = new Outer().new Inner();
18            oi.show();
19     }    
20 }

 

以上是关于java9-6 内部类的主要内容,如果未能解决你的问题,请参考以下文章

错误:这个片段内部类应该是静态的 [ValidFragment]

片段 - 全局视图变量与本地和内部类侦听器和内存泄漏

为啥片段类应该是公开的?

ForegroundService没有从片段开始?

在内部片段类中使用ListView

自定义无内存泄漏的Handler内部类