没有继承就可以实现抽象吗?这是我的代码
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:
我很困惑。请帮忙。
答案 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
正在为disp1
和disp2
提供实施,{{1}}提供Whatever
。
答案 1 :(得分:1)
您的抽象类和具体类之间没有关系。无论你对“抽象”的定义是什么,它实际上代表了类型之间的关系。 abstract
关键字不会建立类之间的关系,代表这种关系,而不是它自己。这种关系需要从双方扩展。
abstract
是一方面关于必须保留的promise的声明,对于继承类型要么实现抽象方法,要么从其继承类型中请求该promise。
另一方通过成为继承自抽象类型的类来实现承诺。如果没有继承,具体类型将失去 is-a 连接。
如果你纠正了你犯的一个重大错误,你会得到你抱怨丢失的编译错误。您未能使用@Override
注释。当您打算覆盖某个方法时,始终使用@Override
注释,或者您将永远享受您在此处显示的那种错误。