这是JavaTest类
package testing.test;
public class JavaTest
{
int i=2;
}
Run Code Online (Sandbox Code Playgroud)
这是JavaTest2类,它扩展了JavaTest
package testing.test;
class JavaTest2 extends JavaTest
{
public static void main(String[] args) {
new JavaTest2().add(5);
}
void add(int i)
{
System.out.println(5+i);
}
}
Run Code Online (Sandbox Code Playgroud)
现在输出到10,实际问题是得到父类的i值添加..
该事在这里是你的add方法阴影的i类与属性i声明为参数变量.因此,在使用iinside add方法时,您使用的是i参数,而不是i属性.
要注意区别,请将add方法更改为:
void add(int i) {
System.out.println(5+i);
System.out.println(5+this.i); //this will do the work for you
}
Run Code Online (Sandbox Code Playgroud)
类构造函数使用阴影的一个很好的例子:
public class SomeClass {
int x;
public SomeClass(int x) {
//this.x refers to the x attribute
//plain x refers to x parameter
this.x = x;
}
}
Run Code Online (Sandbox Code Playgroud)
跟进评论:
得到它,但如果我在JavaTest2中拥有与i相同的成员会发生什么......并且做同样的事情.i
这称为隐藏,在Oracle的Java教程:隐藏字段中有很好的解释
例:
class JavaTest2 extends JavaTest {
int i = 10;
void add(int i) {
System.out.println(5+i);
System.out.println(5+this.i); //this will add 5 to i attribute in JavaTest2
System.out.println(5+super.i); //this will add 5 to i attribute in JavaTest
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |