java - 我们可以在java的扩展抽象类中创建新的抽象方法吗
问题描述
我从上个月开始学习java。我对抽象类有疑问。我正在尝试在抽象类test中添加另一种方法,但编译器抛出错误。你能告诉我在这段代码中做错了什么吗?
错误 - 找不到符号 - 方法 err()
class abstct
{
public static void main(String args[])
{
one obj = new error();
obj.show();
obj.test();
obj.err();
}
}
abstract class one
{
abstract void show();
abstract void test();
}
abstract class two extends one
{
public void show()
{
System.out.println("Understood");
}
abstract void test();
}
abstract class three extends two
{
public void test()
{
System.out.println("Understood");
}
abstract void err();
}
class error extends three
{
public void err()
{
System.out.println("Here I am getting error .. ??");
}
}
解决方案
请遵循 java 标准并将类的第一个字母设置为大写。
在这里,您实例化了一个Error
类,但将其放在了Inter
属性中。它是有效的Error
extends Inter
。但这也意味着您只能使用Inter
属性的方法。所以你可以访问show
和test
。
这是您可以使用的代码
public class Abstr {
public static void main(String args[]) {
Inter obj = new Error();
if (obj instanceof Test){
((Test)obj).err();
}
obj.show();
obj.test();
}
}
abstract class Inter {
abstract void show();
abstract void test();
}
abstract class Impl extends Inter {
public void show() {
System.out.println("Understood");
}
}
abstract class Test extends Impl {
public void test() {
System.out.println("Understood");
}
abstract void err();
}
class Error extends Test {
public void err() {
System.out.println("Here I am getting error .. ??");
}
}
注意在 jdk14 中,有一个模式匹配的预览,如果启用你可以写:
if (obj instanceof Test){
obj.err();
}
推荐阅读
- django - 一个视图中的 2 个应用程序 Django 中的帖子和评论
- javascript - event.preventDefault() 在任何浏览器中都不起作用
- c# - 反射:获取参数Object中实现接口的所有属性
- javascript - 需要一些关于 JS 驱动的搜索框的建议
- python - 使用正则表达式加载、打开和操作 Python 中的文本文件
- sql-server - 错误:使用 kafka-connect-cdc-mssql:1.0.0-preview
- bash - 是否有一个等效于 prctl (PR_SET_PDEATHSIG, SIGKILL) 的 shell 脚本来处理僵尸孩子?
- python - Django-admin,按字段选择
- c# - 程序未使用 MongoDB 扩展
- php - 如何在 Laravel 上通过服务器端处理自定义数据表中的搜索