java中关于访问父类的父类的同名属性问题
class A{public int a;
public A(){
a = 100;
}
}
class B extends A{
public int a;
public A(){
a = 90;
}
}
class C extends B{
public void m{
//如何用访问父类的父类中的同名成员变量a
}
}
class Test{
public static void main(String[] args){
C c1 = new C();
c1.m();
}
}
我记得我好像看过一个视频,好像是用 super.XXX.XXX.a 解决的,我知道的方法有在类B中设置方法使之能访问到A;还有就是使用((A)this).a;用super的我想不太出来,想请教一下各位 本帖最后由 小伤口 于 2022-1-8 00:15 编辑
1你的代码本身就有错误
class B extends A{
public int a;
public A(){
a = 90;
}
}
这是B类应该写B的构造方法而不是父类
2你的m方法少()号
public void m{
//如何用访问父类的父类中的同名成员变量a
}
如果用super访问,首先明白java不支持多继承只有单继承,但是可以用你类似上述的代码实现间接的多继承。但是间接就有间接的局限性
你的B类继承A类,C类继承B类,因为你的B类a变量覆盖了A类的a变量,所以你的C类只继承了B类覆盖过后的a变量,而super本身的作用就是访问父类的属性和变量
你覆盖掉了父类的父类的变量所以是无法用super直接访问父类的父类
至于你说的
我记得我好像看过一个视频,好像是用 super.XXX.XXX.a 解决的
我想是因为视频的代码是没有将父类的父类变量覆盖掉,所以可以直接用super.
或者是类似像我下面的方法,所以是super.xxx
我这里给出了一个间接用super访问的方法,将就着看吧
package com.xiaoshangkou;
class A{
public int a;
public A(){
a = 100;
}
}
class B extends A{
public int a;
public int test1(){
return super.a;
}
public B(){
a = 90;
}
}
class C extends B{
public void m(){
//如何用访问父类的父类中的同名成员变量a
System.out.println(super.test1());
}
}
class Test{
public static void main(String[] args){
C c1 = new C();
c1.m();
}
} 小伤口 发表于 2022-1-8 00:04
1你的代码本身就有错误
这是B类应该写B的构造方法而不是父类
这个方法我知道,但还是感谢,还可以用强制类型转化来强制读取父类的父类的属性{:5_109:} johnzsj 发表于 2022-1-8 09:54
这个方法我知道,但还是感谢,还可以用强制类型转化来强制读取父类的父类的属性
你的问题是用super访问,不是强制类型转换呀{:5_102:} 小伤口 发表于 2022-1-8 11:14
你的问题是用super访问,不是强制类型转换呀
对,只是还想到了强制转换的一种方法
页:
[1]