本帖最后由 小伤口 于 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();
- }
- }
复制代码