如果我有班级鱼
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访问什么年龄变量 - 是父项还是来自子类?
提前谢谢?
答案 0 :(得分:0)
年龄将来自Fish,但由于您正在使用名称“age”的另一个变量进行处理,因此隐藏的变量将被隐藏,因此您将在当前对象中使用的是在Shark中声明的变量
答案 1 :(得分:0)
您访问的age
取决于您用来访问它的类型。 this
始终具有方法或构造函数所属类的类型 - 也就是说,在Fish
的方法/构造函数中,this
的类型为{ {1}}。在Fish
s方法/构造函数中,Shark'
的类型为this
。 (只有一个对象,它结合了Shark
和Fish
的功能[是的,它确实有两个具有相同名称的单独字段];我们正在讨论的内容是它的引用类型。)
(注意,对于实例变量(例如Shark
;也称为“fields”),这是不同而不是实例方法。在Java中,方法是多态的,实例变量不是。)
因此,在age
代码中,Fish
为this.age
的{{1}}。在Fish
代码中,age
为Shark
的{{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
是对它的引用 当前对象 - 其方法或构造函数所在的对象 调用。
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
}