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
}
}
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
}
}
Klasse1
没有doo
方法,所以它很自然。
您可以将其转换为Klasse2,然后像这样使用:
((Klasse2)k).doo();
在编译时,Java编译器检查引用类型而不是实例类型。
在这种情况下,引用类型是Klasse1
,它没有doo()
。因此它会抛出错误。
类和的行为有何不同?我为什么要选择其中一个? (目前,TypeScript手册和语言规范不包括抽象类。)
本文向大家介绍C#扩展抽象基类,包括了C#扩展抽象基类的使用技巧和注意事项,需要的朋友参考一下 示例 与接口(可以描述为实现合同)不同,抽象类充当扩展的合同。 抽象类无法实例化,必须对其进行扩展,然后可以实例化生成的类(或派生类)。 抽象类用于提供通用实现 上面的示例显示了实现Car的任何扩展类如何自动接收HonkHorn方法。这意味着任何开发新汽车的开发人员都无需担心它将如何鸣笛。
译者:cangyunye 作者: Adam Paszke 修订者: Adam Dziedzic 在这个教程里,我们要完成两个任务: 创建一个无参神经网络层。 这里需要调用numpy作为实现的一部分。 创建一个权重自主优化的伸进网络层。 这里需要调用Scipy作为实现的一部分。 import torch from torch.autograd import Function 无参数示例 这一层并
问题内容: 我之前了解到抽象类可以扩展具体类。尽管我没从JAVA设计师那里看到原因,但是没关系。我还了解到,扩展具体类的抽象类可以使重写的方法抽象。为什么?您可以提供有用的用例吗?我正在尝试学习设计模式,我不想错过任何东西。 这是示例: 问题答案: 如果我有一组想要默认实现的类(以便它们可以从扩展),并且想要强制提供自己的实现(在这种情况下使其抽象为子类会强制执行此操作。) 当然,此示例中的另一种