Java 成员内部类 静态内部类

  

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.gibe;
 
public class Ersatz {
  public static void main(String[] args) {
    // 外部其他类, 使用成员内部类三种方法
    Outer outer = new Outer();
    outer.mm();
    // 外部instance.new
    Outer.Inner inner = outer.new Inner();
    inner.say();
    // 外部类编写对象方法, 返回Inner对象
    Outer.Inner instance = outer.getInstance();
    instance.say();
    //
    Outer.Inner vv = new Outer().new Inner();
    vv.say();
  }
}
 
class Outer {
  private int n = 11;
  public String name = "Outer";
 
  private void hi(Inner inner) {
    System.out.println("Outer hi()");
    System.out.println("inner: "+inner);
  }
 
  private static final void m() {
    System.out.println("Outer static m()");
  }
 
  public final class Inner {
    private double salary = 99.8;
    private int n = 22;
 
    public Inner() {
      System.out.println(this);
    }
 
    public void say() {
      System.out.println("n=" + n + " Outer.this.n=" + Outer.this.n);
      hi(this);
      m();
    }
  }
 
  public Inner getInstance() {
    return new Inner();
  }
 
  public void mm() {
    Inner inner = new Inner();
    inner.say();
  }
}

  

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.gibe;
 
public class Ersatz {
  public static void main(String[] args) {
    Outer outer = new Outer();
//    outer.mm();
    // 静态内部类, 可通过类名直接访问(满足访问权限)
    Outer.Inner inner = new Outer.Inner();
    inner.n();
    // 通过Outer方法(static or non-static)
    Outer.Inner inner1 = outer.getInner();
    inner1.n();
    Outer.Inner inner2 = Outer.getInner_();
    inner2.n();
  }
}
 
class Outer {
  private int n = 11;
  private static String name = "Outer";
 
  private static void m() {
    System.out.println("Outer static m()");
  }
 
  static class Inner {
    private static String name = "Inner";
 
    public void n() {
      System.out.println("Inner name=" + name + " Outer.name=" + Outer.name);
      m();
    }
  }
 
  public void mm() {
    Inner inner = new Inner();
    inner.n();
  }
 
  public Inner getInner() {
    return new Inner();
  }
 
  public static Inner getInner_() {
    return new Inner();
  }
}

  

 

posted @   ascertain  阅读(40)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2020-07-08 operation
2020-07-08 namp & ncat
2020-07-08 rsync
2020-07-08 gcc编译选项
2020-07-08 Instrument: vim
2020-07-08 ntp服务配置
2020-07-08 C语言实现矩阵相乘
点击右上角即可分享
微信分享提示