2017-09-17 74 views
0

如果我有一类鱼父母和孩子相同的变量名,继承

public class Fish { 
int numberOfFins; 
int age; 
public Fish(int age){ 
    this.age=age; 

}} 

和一流的鲨鱼,它扩展了鱼类

public class Shark extends Fish{ 
private int age; 

public Shark(int age) { 
    super(age); 
    this.age=age; 
}} 

什么年龄变量被访问的低谷关键字这一点 - 是它父母或孩子班?

在此先感谢?

+0

**强**推荐使用任何几种典型的缩进和支架放置方式,**不要**上面的缩进和支架放置。我在回答中使用了其中的一个标准。 –

回答

-1

this

在实例方法或构造,this是 参考当前对象 - 其方法或构造是被 调用的对象。

public Fish(int age){ 
    this.age=age;/the one is Fish 
} 

同样在其他类中,具有相同名称的成员,这将在其c'tor引用:

public Shark(int age) { 
    super(age); 
    this.age=age; // the one in class Shark 
} 
+0

downvote的原因? – nullpointer

0

年龄将从鱼,但因为你可以inhereted将另一个名称为“age”的变量进行decal变量被隐藏的变量将被隐藏,因此您将在当前对象中引用的内容是由Shark所声明的变量

0

其中您访问210取决于您使用访问它的东西的类型this始终具有类的类型的方法或构造属于  —即在Fish的方法/构造,thisFish类型。在Shark'的方法/构造函数中,this的类型为Shark。 (这里只有一个对象,它结合了FishShark [没错,它确实有两个名称相同的单独的字段]的特征;我们谈论的是对它的引用类型。)

(注意,这是不同实例变量(如age;又名“田”),比它是实例方法在Java中,方法是多态的,实例变量都没有。)

左右的时间内Fish代码, this.ageFishage。在Shark代码中,this.ageShark的代码age

例如为:

public class Fish { 
    int numberOfFins; 
    int age; 
    public Fish(int age) { 
     this.age=age;   // Sets Fish#age 
    } 
} 

public class Shark extends Fish { 
    private int age; 

    public Shark(int age) { 
     super(age); 
     this.age=age;   // Sets Shark#age 
    } 
} 

这并不只适用于this,它适用于变量为好。看看下面main(并注意我设置两个age s到不同的值; Sharkage两倍Fishage):当你出现在Java中,FWIW我要开始了

class Fish { 
    int numberOfFins; 
    int age; 
    public Fish(int age) { 
     this.age = age;   // Sets Fish#age 
    } 
} 

public class Shark extends Fish { 
    private int age; 

    public Shark(int age) { 
     super(age); 
     this.age = age * 2;  // Sets Shark#age 
    } 

    public static void main(String[] args) { 
     Shark s = new Shark(10); 
     Fish f = s; 
     System.out.println(f.age); // 10 
     System.out.println(s.age); // 20 
    } 
}