本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>
提问:什么是Java中的抽象类?
回答1:
抽象类是无法实例化的类。通过创建可以实例化的继承子类来使用抽象类。抽象类为继承的子类做一些事情:
1, 定义继承的子类可以使用的方法。
2, 定义继承子类必须实现的抽象方法。
举个栗子
abstract public class AbstractClass
{
abstract public void abstractMethod();
public void implementedMethod() { System.out.print("implementedMethod()"); }
final public void finalMethod() { System.out.print("finalMethod()"); }
}
复制代码
请注意,“ abstractMethod()”没有任何方法主体。因此,您不能执行以下操作:
public class ImplementingClass extends AbstractClass
{
// ERROR!
// 这里原文表达的有问题,这个代码想表示的是,对于一个普通类,我们可以
// 继承父类的时候,不重写父类的方法,但是对于抽象类的抽象方法
// 你必须在子类中实现它
}
复制代码
没有实现abstractMethod()方法,因此在有人调用ImplementingClass.abstractMethod()时,JVM不知道该做什么。
这是正确的ImplementingClass.
public class ImplementingClass extends AbstractClass
{
public void abstractMethod() { System.out.print("abstractMethod()"); }
}
复制代码
请注意,您不必定义implementedMethod()或finalMethod()。它们已经由AbstractClass定义。
这是另一个正确的说法ImplementingClass。
public class ImplementingClass extends AbstractClass
{
public void abstractMethod() { System.out.print("abstractMethod()"); }
public void implementedMethod() { System.out.print("Overridden!"); }
}
复制代码
在这种情况下,您已重写了implementedMethod()。
但是,由于存在final关键字,因此无法执行以下操作。
public class ImplementingClass extends AbstractClass
{
public void abstractMethod() { System.out.print("abstractMethod()"); }
public void implementedMethod() { System.out.print("Overridden!"); }
public void finalMethod() { System.out.print("ERROR!"); }
}
复制代码
现在,您还可以实现两次抽象类:
public class ImplementingClass extends AbstractClass
{
public void abstractMethod() { System.out.print("abstractMethod()"); }
public void implementedMethod() { System.out.print("Overridden!"); }
}
// In a separate file.
public class SecondImplementingClass extends AbstractClass
{
public void abstractMethod() { System.out.print("second abstractMethod()"); }
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END