Java 在子类中使用super或this访问超类中的属性?
就超类中定义的属性值而言,使用子类中相同的属性,并且该属性被定义为受保护,那么使用超类或这不会有任何区别,对吗那么为什么语言真的有这些访问属性的方法?是否存在这样一种情况,即它们将具有不同的值Java 在子类中使用super或this访问超类中的属性?,java,Java,就超类中定义的属性值而言,使用子类中相同的属性,并且该属性被定义为受保护,那么使用超类或这不会有任何区别,对吗那么为什么语言真的有这些访问属性的方法?是否存在这样一种情况,即它们将具有不同的值 class A{ protected int a = 15; } class B{ public void printA() { System.out.print(super.a) // prints 15 System.out.print(this.
class A{ protected int a = 15;
}
class B{
public void printA()
{
System.out.print(super.a) // prints 15
System.out.print(this.a) // prints 15
}
}在这种情况下,没有任何区别。但是,只要您改为使用方法而不是变量,并在B
中引入另一种方法,该方法将A
中的方法隐藏起来,则会产生不同:
class A {
protected int a = 15;
}
class B extends A {
private int a = 10;
public void printA() {
System.out.println(super.a); // prints 15
System.out.println(this.a); // prints 10
}
}
但这在方法中比在字段中更常见-通常重写实现需要调用超类实现作为其实现的一部分:
public void foo() {
super.foo();
// Now do something else
}
我个人建议避免使用非私有字段,此时字段部分变得无关紧要
有关阴影的详细信息,请参见。在这种情况下,阴影没有任何区别。但是,只要您改为使用方法而不是变量,并在B
中引入另一种方法,该方法将A
中的方法隐藏起来,则会产生不同:
class A {
protected int a = 15;
}
class B extends A {
private int a = 10;
public void printA() {
System.out.println(super.a); // prints 15
System.out.println(this.a); // prints 10
}
}
但这在方法中比在字段中更常见-通常重写实现需要调用超类实现作为其实现的一部分:
public void foo() {
super.foo();
// Now do something else
}
我个人建议避免使用非私有字段,此时字段部分变得无关紧要
有关阴影的详细信息,请参阅。B扩展A*-否则编译错误是。还没有在这里全部输入。B扩展了A*-否则编译错误是的。尚未在此处全部键入。因此,成员变量不可重写:尽管如此,成员变量是不可重写的: