6.6 什么是Java中的抽象类? | Java Debug 笔记

本文正在参加「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
喜欢就支持一下吧
点赞0 分享