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

抽象方法如何在不被覆盖的情况下返回期望的类型?

伯向晨
2023-03-14

我最近在浏览SurfaceView的android文档,我发现要获得实际的surface,你必须做以下事情:

SurfaceView.getHolder().getSurface()

surface holder的文档在这里:https://developer . Android . com/reference/Android/view/surface holder . html

现在一个SurfaceHolder从getHolder()返回,然后你可以在那个支架上调用getSurface()来获取一个表面。现在如果你检查getSurface()方法,你会看到它是一个抽象方法。我认为抽象方法应该被覆盖,然后它可以返回期望类型。

然而,这里给你一个接口的引用,它是SurfaceHolder,然后你调用getSurface(),这是一个抽象方法,这意味着没有方法被override.So检查和返回适当表面的代码是如何从抽象方法调用的?

共有2个答案

闻人冷勋
2023-03-14

在运行时实际返回的是一个实现SurfaceHolder的对象。您必须查看运行时库中的其他地方以确定返回的具体对象类型。

穆阳炎
2023-03-14

你对抽象方法的理解是正确的。

你缺少的是 getHolder() 返回一个具体的实现。其抽象基的具体子类,或者在本例中为接口的具体实现。该函数被声明为返回基类/接口,但实际上可以返回任何派生类。这是多态性的主要形式之一:

 Base getThing () { ... }

可以返回 Base,也可以返回 Base 的任何子类/实现。

进一步阅读:https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html

正在返回给你的具体实现很可能是一些内部非公开的东西,谁知道呢(我自己也不熟悉Android api),不过跟你没关系。你不需要确切地知道返回给你的是什么。你只需要知道它实现了SurfaceHolder什么的。

 类似资料:
  • 我的A类是: 另一类B为: 如果我将类A的方法sayHello(int,int)的返回类型从int改为float,它会显示一个错误,因为根据覆盖规则,返回类型也被认为是无效的覆盖和重载。 我不明白为什么java不允许更改返回类型。为什么返回类型也需要相同

  • 问题内容: 因此,我一直在为编程类编写抽象作业,但遇到了问题。我现在的目标是能够使用抽象,然后能够使用矩形和椭圆形绘制一个简单的城市,例如矩形建筑物或灯柱上的椭圆形灯。 我在编译时收到的错误是:MyTestApp.Rectangle不是抽象的,并且不会覆盖MyTestApp.Shape中的抽象方法drawEllipse(java.awt.Graphics)。该错误显示在类Shape下方的“矩形扩展

  • 问题内容: 这就是我的代码。它给我一个错误说“QuadraticSolver.java:4:错误:不,不重写抽象方法在 ” 我不知道该怎么做。我尝试在所有ActionListener事件之前添加@Override,但仍然无法正常工作。 问题答案: 既然实施,就应该实施。 您在匿名类中实现了该方法。 为了解决这个问题,无论是添加的实现 来或不要求实现该接口。

  • 我想为isEmpty方法添加自定义行为。 当我从< code>JsonSerializer扩展时 我应该重写序列化方法,因为它是抽象的。 我想让序列化方法保持原样,只覆盖is空方法。

  • 我想强制子类实现我母亲类的一个实现方法。我看到了一个已实现方法的Java-Force实现,但我无法将我的母类转换为抽象类。 在这个例子中,我想强制myClass实现myMethod。 抱歉我的英语...

  • 请帮帮忙!!我一直在到处寻找,但没有得到答案 错误:MainApplication不是抽象的,并且不覆盖抽象方法 环境 android/build.gradle系统 App/build.gradle 我的主应用程序 错误: 任务:app:compileDebugJavaWithJavac C:\Users\user\Downloads\Scripts\kantongin mobile\trader