首页 > 解决方案 > 我们可以在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 .. ??");
    } 
} 

标签: javaabstract-classextends

解决方案


请遵循 java 标准并将类的第一个字母设置为大写。

在这里,您实例化了一个Error类,但将其放在了Inter属性中。它是有效的Errorextends Inter。但这也意味着您只能使用Inter属性的方法。所以你可以访问showtest

这是您可以使用的代码

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();
}


推荐阅读