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

抽象、扩展和创建实例问题[重复]

谷梁德容
2023-03-14

Klasse1是一个抽象类,有一个foo()方法。Klasse2扩展了Klasse1并有一个doo()方法,但不会覆盖foo()方法。

为什么我不能在Tester类中调用doo()方法?

Klasse1.java

public abstract class Klasse1 {
    public void foo() {
        System.out.println("Klasse1");
    }
}

Klasse2.java

public class Klasse2 extends Klasse1 {
    public void doo() {
        System.out.println("Klasse2");
    }
}

Tester.java

public class Tester {
    public static void main(String[] args) {
        Klasse1 k;
        k = new Klasse2();
        k.foo();
        k.doo(); // doesn't work
    }
}

共有3个答案

璩慎之
2023-03-14

K是类Klasse2的对象,但被引用为Klasse1

K可以调用声明的所有方法,并且可以调用声明为该类的所有方法。

public class Tester {
    public static void main(String[] args) {
        Klasse1 k;
        k = new Klasse2();
        k.foo();
        ((Klasse2)k).doo(); // now works
    }
}

奚无尘
2023-03-14

Klasse1没有doo方法,所以它很自然。

您可以将其转换为Klasse2,然后像这样使用:

((Klasse2)k).doo();
华章横
2023-03-14

在编译时,Java编译器检查引用类型而不是实例类型。

在这种情况下,引用类型是Klasse1,它没有doo()。因此它会抛出错误。

 类似资料:
  • 类和的行为有何不同?我为什么要选择其中一个? (目前,TypeScript手册和语言规范不包括抽象类。)

  • 本文向大家介绍C#扩展抽象基类,包括了C#扩展抽象基类的使用技巧和注意事项,需要的朋友参考一下 示例 与接口(可以描述为实现合同)不同,抽象类充当扩展的合同。 抽象类无法实例化,必须对其进行扩展,然后可以实例化生成的类(或派生类)。 抽象类用于提供通用实现 上面的示例显示了实现Car的任何扩展类如何自动接收HonkHorn方法。这意味着任何开发新汽车的开发人员都无需担心它将如何鸣笛。

  • 译者:cangyunye 作者: Adam Paszke 修订者: Adam Dziedzic 在这个教程里,我们要完成两个任务: 创建一个无参神经网络层。 这里需要调用numpy作为实现的一部分。 创建一个权重自主优化的伸进网络层。 这里需要调用Scipy作为实现的一部分。 import torch from torch.autograd import Function 无参数示例 这一层并

  • 问题内容: 我之前了解到抽象类可以扩展具体类。尽管我没从JAVA设计师那里看到原因,但是没关系。我还了解到,扩展具体类的抽象类可以使重写的方法抽象。为什么?您可以提供有用的用例吗?我正在尝试学习设计模式,我不想错过任何东西。 这是示例: 问题答案: 如果我有一组想要默认实现的类(以便它们可以从扩展),并且想要强制提供自己的实现(在这种情况下使其抽象为子类会强制执行此操作。) 当然,此示例中的另一种