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

抽象类非抽象方法调用

耿敏达
2023-03-14

这似乎是一个基本问题。但在采访前需要澄清。

我在抽象类中有一个非抽象方法。它的具体类重写了该方法。但我想调用父类的原始方法来调用,而不是重写方法。有什么办法吗?

据我所知,没有办法调用原始方法?

public abstract class Testabstract {

    public void t1() {
        System.out.println("parent");
    }

}


public class Testconcrete extends Testabstract {

    public void t2() {
        System.out.println("child11");
    }

    public void t1() {
        System.out.println("childss");
    }

}

public class Main {

    public static void main(String[] args) {

        Testconcrete a = new Testconcrete();

        a.super.t1();// compile error
        a.t2();

    }
}

共有3个答案

郝冥夜
2023-03-14

你的理解是正确的。如果不更改类TestabstractTestconcrete中的一个,就无法在Testconcrete实例上调用原始方法。

我认为用反思来做这件事是不可能的。

郑茂材
2023-03-14

super关键字只能在子类中与一起使用。

对于前男友,你可以试试

 public void t2() {
        super.t1();
        System.out.println("child11");
    }

强制转换到父级也无法工作,因为您的基本元素子级

所以你不能以干净的方式从儿童类之外访问。不知道他们是否有天真的方式这样做。

卫高谊
2023-03-14

不,不能直接调用超类的重写方法。这是故意的;子类可能会添加正确性所必需的某种行为(例如维护某种缓存或其他数据结构)或功能需求(例如日志记录)。绕过子类的功能将使模型的正确性面临风险,并破坏保证模型正确性的封装。

 类似资料:
  • 我正在尝试对扩展抽象基的类进行单元测试。以下是“类似的类”,以供说明: 下面是我正在尝试的单元测试: 当我做这个测试的时候 java.lang.NullPointerException 在中 我知道自动连线的“滤水器”没有初始化。但接下来,我只想在我的单元测试中模拟抽象的“非抽象”方法。 我该如何使用EasyMock来实现这一点呢?另外,我不知道和应该做什么。

  • 大家好,我有这个主课堂 错误:(42,8)错误:Home不是抽象的,并且不会覆盖OnFragmentInteractionListener中的onFragmentInteract(String)抽象方法 我创建了一个导航抽屉,并希望有一个新的片段来显示另一个家庭活动的内容。 Android Studio告诉我做个家。类抽象或实现抽象方法。 里面: 我那样做了,但是什么也没有改变。我不能让home类

  • 问题内容: Java 8接口默认方法与抽象类中的非抽象方法-两者之间是否有任何区别(除了iface-类,可见性等不同) 默认方法不是Java的后退一步,是否违反Java多年来宣传的本质? 问题答案: 如果抽象子类的具体子类被super()覆盖,则抽象类中的非抽象方法将被调用。因此,存在多种可能性。如果不重写method,则将执行超类方法。如果我们在具体的子类方法中使用super(),则将执行被超类

  • Java 8接口默认方法与抽象类中的非抽象方法--两者之间有什么区别吗(除了iface-class、可见性等的区别之外) 默认方法是不是在Java中倒退了一步,意味着它违背了Java多年来宣传的本质?!

  • 问题内容: 我得到了几种解释,但是到目前为止,我还无法理解Java中的抽象类和方法是什么。 有人说它必须与程序的安全性做些关系,另一些人说不是那样。 即使从Dietel&Dietel的书中,我也不明白它的目的。我们何时,何地,为什么使用它? 请像您正在教初学者一样进行解释,非常感谢您的帮助。 问题答案: 抽象类是无法实例化的类。唯一的目的是扩展其他类。 抽象方法是抽象类中的方法(必须声明为抽象),

  • 本文向大家介绍php中的抽象方法和抽象类,包括了php中的抽象方法和抽象类的使用技巧和注意事项,需要的朋友参考一下 1、什么是抽象方法? 我们在类里面定义的没有方法提的方法就是抽象方法。所谓的没有方法体指的是,在声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时方法还要加一个关键字"abstract"来修饰。 例如: 2、什么是抽象类? 只要一个类里面