• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

简单的继承,但令人困惑的

java 来源:anshulkatta 3次浏览

这是类JavaTest简单的继承,但令人困惑的

package testing.test; 

public class JavaTest 
{ 
    int i=2; 
} 

这是类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); 
    } 
} 

现在的输出来10,实际的问题是得到家长的我值类添加..


===========解决方案如下:

东西这里是你的add方法阴影i变量声明为参数的类的属性。因此,在add方法中使用i时,使用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 
} 

阴影的一个很好的例子是在类的构造方法:

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; 
    } 
} 

从评论跟进:

明白了,但如果我在JavaTest2中拥有和我一样的成员,并且执行相同的操作,会发生什么.i

这就是所谓的躲在和Oracle的Java教程是很好的解释:Hiding Fields

例子:

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 
    } 
} 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)