抽象可以在没有继承的情况下完成吗? java的

时间:2017-04-02 04:14:17

标签: java inheritance abstract-class abstract abstraction

没有继承就可以实现抽象吗?这是我的代码

     abstract class whatever
{
    abstract void disp1();
    abstract void disp2();
    abstract void disp3();
}

 class what {

    void disp1()
    {
        System.out.println("This is disp1");
    }
}



public class threeClasses {

    public static void main (String args[])
    {
        what obj =new what();
        obj.disp1();

    }

}

请注意以上,i:

  1. 没有扩展抽象类“what”中的类“what”,但代码运行完美且没有错误
    1. 没有将类“what”声明为抽象(因为它没有声明其他两个方法disp2()和disp3())
  2. 我很困惑。请帮忙。

2 个答案:

答案 0 :(得分:2)

您没有使用whatever(并且应该遵守Java命名约定)。 abstract类(和继承)背后的想法是存在接口契约。让我们用更实际的例子来研究它,

abstract class Whatever {
    abstract void disp1();

    void disp2() {
        System.out.println("disp2");
    }

    void disp3() {
        System.out.println("disp3");
    }
}

然后让What扩展它。覆盖两种演示方法(注释是一种有用的编译时安全检查)

class What extends Whatever {
    @Override
    void disp1() {
        System.out.println("This is disp1");
    }

    @Override
    void disp2() {
        System.out.println("This is disp2");
    }
}

最后,通过What合同

调用Whatever实例上的方法
public static void main(String args[]) {
    Whatever obj = new What();
    obj.disp1();
    obj.disp2();
    obj.disp3();
}

哪个输出

This is disp1
This is disp2
disp3

请注意,What正在为disp1disp2提供实施,{​​{1}}提供Whatever

答案 1 :(得分:1)

您的抽象类和具体类之间没有关系。无论你对“抽象”的定义是什么,它实际上代表了类型之间的关系。 abstract关键字不会建立类之间的关系,代表这种关系,而不是它自己。这种关系需要从双方扩展。

abstract是一方面关于必须保留的promise的声明,对于继承类型要么实现抽象方法,要么从其继承类型中请求该promise。

另一方通过成为继承自抽象类型的类来实现承诺。如果没有继承,具体类型将失去 is-a 连接。

如果你纠正了你犯的一个重大错误,你会得到你抱怨丢失的编译错误。您未能使用@Override注释。当您打算覆盖某个方法时,始终使用@Override注释,或者您将永远享受您在此处显示的那种错误。

相关问题