当前位置: 首页 > 知识库问答 >
问题:

如何使用超类〔duplicate〕的实例访问子类的重写变量

阎彬炳
2023-03-14

我是Java的初学者。这是我的代码

class Super{
public int a;
}
class sub extends Super{
int a = 10;
}

public class test{
public static void main(String args[]){

Super var = new sub();
System.out.println(var.a);//Here I want to print 10 , value of sub class
} 
}

有没有可能,如果有,请告诉我怎么做?我对这个问题的标题有一些问题,所以请建议我一个合适的,因为我已经解释了我在代码中想要的一切。

共有2个答案

景成和
2023-03-14

将变量设为私有,并在两个类中添加getA()方法,子类中的方法覆盖超类。

public class Foo
{
    static class Super{
        private int a;
        public int getA() { return a; }
    }

    static class Sub extends Super{
        private int a = 10;
        @Override
        public int getA() { return a; }
    }

    public static void main(String args[]) {
        Super sup1 = new Super();
        Super sup2 = new Sub();
        Sub   sub  = new Sub();
        System.out.println(sup1.getA());
        System.out.println(sup2.getA());
        System.out.println(sub.getA());
    } 
}

这个输出

0
10
10
桑璞
2023-03-14

您应该为超级类中的添加getter方法

public int getA(){
return a;
}

子类也将继承getter,你可以在sublass中访问a的值。还建议将类属性设置为protected或private,而不是public。

 类似资料:
  • 问题内容: 所以我有两节课:和。是抽象超类,是其子类。 这是代码 这是代码 我现在的问题是在方法中,每当我尝试在方法中运行它时,如下所示 它打印出0.0。为什么不打印20.11?我该如何解决? ============================================== 编辑:感谢您修复我的愚蠢错误>。< 但是,只要说我的财产正在使用 现在我无法访问它们,因为它们是私有访问权限,还

  • 我的子类是,我需要在我的超类中使用字段和。我知道如何在子类中使用超类变量,但我必须学会如何做相反的事情?谢谢。

  • 假设我有以下代码 然而,现在我希望能够将一个超类对象传递给子类构造函数。我该怎么做? 基本上,我想这样做。。。 但是如果超类更复杂,我不想在super()调用中添加每个值。相反,我只想传入一个已经存在的对象,并将其用作超类。 我想这么做。。。 但我不确定这是否被允许? 如果我在超类定义中添加一个构造函数,似乎我可以完成上面的工作。但那会是什么样子呢?

  • 假设一个抽象超类包含一个名为price of type double的私有变量。 现在假设变量已声明但未初始化。超类包含访问器方法,但是setter方法是抽象的,因此必须在子类中重写它,但是,由于超变量是私有的,有没有办法从子类初始化此变量? 考虑下面的例子:我有4节课;书籍(抽象超级)、非小说类(sub)、小说类(sub)、测试者(测试发生了什么的类)。 图书类: 小说课 非小说类 公共类非小说

  • 我最近一直在翻阅几本书,以便自学Java幸运的是,主要是由于运气,我遇到的困难很少。这种情况刚刚改变。 我在继承和整个超类子类设置下阅读了下面的一节 --创建新的超类对象时,与所有对象一样,会为其指定一个引用(本例中为superReference) --如果创建了一个新的子类对象(定义子类扩展了超类),然后superReference引用被设置为引用该对象而不是原始对象,我的理解是,由于引用是针对

  • 问题内容: 我正在创建一个类及其子类,需要在其中调用父级的静态方法以返回子级实例。 问题答案: 该静态方法被调用,其值是类对象,子类,你把它称为后的构造。因此,您可以使用实例化它: