父和子相同的变量名,继承

时间:2017-09-17 11:54:27

标签: java inheritance

如果我有班级鱼

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

}}

和延伸Fish类的Shark

public class Shark extends Fish{
private int age;

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

通过关键字this访问什么年龄变量 - 是父项还是来自子类?

提前谢谢?

3 个答案:

答案 0 :(得分:0)

年龄将来自Fish,但由于您正在使用名称“age”的另一个变量进行处理,因此隐藏的变量将被隐藏,因此您将在当前对象中使用的是在Shark中声明的变量

答案 1 :(得分:0)

您访问的age取决于您用来访问它的类型this始终具有方法或构造函数所属类的类型 - 也就是说,在Fish的方法/构造函数中,this的类型为{ {1}}。在Fish s方法/构造函数中,Shark'的类型为this。 (只有一个对象,它结合了SharkFish的功能[是的,它确实有两个具有相同名称的单独字段];我们正在讨论的内容是它的引用类型。)

(注意,对于实例变量(例如Shark;也称为“fields”),这是不同而不是实例方法。在Java中,方法是多态的,实例变量不是。)

因此,在age代码中,Fishthis.age的{​​{1}}。在Fish代码中,ageShark的{​​{1}}。

E.g:

this.age

这不仅适用于Shark,它也适用于变量。请看下面的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的{​​{1}}是两个main的{​​{1} }}):

age

答案 2 :(得分:-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
}