Java-覆盖方法时关键字this的范围
作者:互联网
这个问题已经在这里有了答案: > Overriding member variables in Java ( Variable Hiding) 11个
我对Java中的关键字this感到有些困惑,我认为这是指当前对象.在下面的示例中,我创建了一个类A和一个扩展了A的类B.在主函数中,当我调用printMyArray函数时,它将打印1 2 3而不是4 5 67.我可以通过一种方法来调用printMyArray吗?函数并打印在B中初始化的数组?到目前为止,我也可以通过在B类中使用完全相同的方法来实现它,但是我觉得这不是最好的方法.
public class Main {
public static void main(String[] args) {
B b1 = new B();
b1.printMyArray();
}
}
class A {
private int[] numbers = {1,2,3};
public void printMyArray() {
for(int i =0; i < this.numbers.length; i++){
System.out.println(numbers[i]);
}
}
}
class B extends A {
private int[] numbers = {4,5,6,7};
}
解决方法:
A类中的代码无法访问B类的私有部分.因此,当您在A类代码中编写this.numbers时,它将引用A类中的numbers字段.当您在代码中编写this.numbers时B类中的数字,它将引用B类中的数字字段.
注意,字段不会像方法那样被覆盖.在您的示例中,类别B的对象将携带两个数字字段.您获得哪一个取决于哪个类包含您正在运行的代码.
这就是为什么对于超类字段和子类字段使用相同的名称通常是一个糟糕的主意的原因.
标签:method-overriding,this,java 来源: https://codeday.me/bug/20191025/1931647.html