• 内部类调用外部类的成员,同名时怎么调用?


    使用this关键字获取内部类与外部类对象的引用

    在实际工作中,应该尽量避免这种情况。即在定义变量名字的时候,内部类中的变量名字尽量不要与外部类中的变量名字相同。但是如果真的发生这种情 况的话,Java编译器还是有手段可以解决这个变量名字的冲突问题。如果在类中的成员内部类中遇到成员变量名字与外部类中的成员变量名字相同,则可以通过 使用this关键字来加以区别。如现在有一个类名字叫做student。而在这个类中又创建了一个成员内部类,名字叫做age。现在在这两个类中各自定义 了一个成员变量i,用来做循环之用。此时如果在成员内部类中调用这个变量,该如何进行区分呢?通常情况下,如果使用this.i 的方式来调用变量,则表示这个变量是成员内部类中定义的变量。而通过使用student.this.i的形式调用变量时表示此时引用的是外部类的成员变 量。也就是说,如果内部类中引用外部类中同名的成员,需要通过外部类迷名字.this.外部类成员名字的方式加以引用。而且,在引用成员内部类自己的定义 的成员时也需要使用this关键字,以加以区别。显然这非常的麻烦。为此笔者仍然要强调一遍,除非有非常特殊的必要,否则的话要尽量避两外部类与成员内部 类中成员变量或者成员方法采用相同的名字。否则的话,会给后续的引用带来很大的麻烦。

    程序:

     1 public class Test {
     2     public int a = 1;
     3 
     4     public class Tes {
     5         public int a = 3;
     6 
     7         public void out() {
     8             System.out.println("内部类的a值:" + a);
     9             System.out.println("外部类的a值:" + Test.this.a);
    10         }
    11     }
    12 
    13     public Test() {
    14         new Tes().out();
    15     }
    16 
    17     public static void main(String[] args) {
    18         new Test();
    19 
    20     }
    21 }
     

    运行结果:

    内部类的a值:3
    外部类的a值:1
    

     

  • 相关阅读:
    golang gc
    set password to qcow2
    golang reflect struct
    Mac 自启动管理
    shell exec
    shell 管道 与 mkfifo
    shell 读取文件
    shell 函数
    shell read 命令
    ubuntu 快速安装和设置 mysql
  • 原文地址:https://www.cnblogs.com/ouyxy/p/6680023.html
Copyright © 2020-2023  润新知