Java 为什么我需要使用关键字“quot;这";调用我的封闭方法或变量
我怀疑我是否有一个非静态嵌套类,为什么我需要使用关键字“this”来调用封闭类的方法或变量? 我的想法是:如果一个非静态嵌套类可以访问其封闭类的方法和变量,并且一个非静态嵌套对象实例已经与其封闭对象实例关联,那么为什么我需要使用“this”? 例如,我有以下代码:Java 为什么我需要使用关键字“quot;这";调用我的封闭方法或变量,java,nested-class,Java,Nested Class,我怀疑我是否有一个非静态嵌套类,为什么我需要使用关键字“this”来调用封闭类的方法或变量? 我的想法是:如果一个非静态嵌套类可以访问其封闭类的方法和变量,并且一个非静态嵌套对象实例已经与其封闭对象实例关联,那么为什么我需要使用“this”? 例如,我有以下代码: public class ClassA { public class ClassB { public void bye() { ClassA.this.hello();
public class ClassA {
public class ClassB {
public void bye() {
ClassA.this.hello();
// Why not just ClassA.hello()?
}
}
public void hello() {
}
}
如果从封闭类的方法调用非静态类的方法,我应该怎么做?例如,如果从方法hello()调用bye(),我应该怎么键入 首先,您只需调用
hello()
ClassA.hello()
将在ClassA中查找名为hello()
的静态方法ClassA.this.hello()
查找一个实例方法。考虑这种情况,当内部类和外部类都有一个具有相同签名的方法时,您需要能够区分要调用的方法:
public class ClassA {
public class ClassB {
public void hello(){
System.out.println("Hello b!);
}
}
public void hello() {
System.out.println("Hello a!);
}
}
如果从classB调用hello(),会发生什么?你得到你好b
如果从classB调用this.hello(),会发生什么?你得到你好b
这两者是等价的
从classB调用ClassA.hello()怎么样?如果出现异常,则没有声明名为hello()的静态方法
但是如果您从classB调用ClassA.this.hello()?你得到了一个问候!这是从内部类获取外部类引用的语法,如果它们都有一个具有相同签名的方法,否则使用这种语法会有点多余,因为内部类已经可以访问外部类方法 ClassA.hello()
如果将hello()
声明为static
,则可以使用。但是因为它是一个实例方法,所以需要在实例上调用它
ClassA。此
语法在中称为限定的this
,是引用封闭类型的this
实例的唯一方法。您只需键入hello()。如果没有这个关键字,外部类的静态方法就会产生歧义。定义如下:谢谢!如果从封闭类的方法调用非静态类的方法,我应该怎么做?例如,如果从方法hello()调用bye(),我应该怎么键入?@antox您需要在内部类的实例上调用它,例如new ClassB().bye()
。但问题是为什么ClassB.hello()
不够这是调用静态方法的语法。但是没有称为hello()declared的静态方法,您不需要键入this.hello()
来调用普通类中称为hello()
的非静态方法。您是正确的。但是,当您有一个内部类和一个外部类都有具有相同签名的方法时,就会出现这种情况。在这一点上,能够选择呼叫哪一个是很重要的。