抽象类和具体类之间的区别

1)抽象类

  • “抽象”的关键字是强制性的声明抽象类

  • 我们不能使用new关键字直接创建抽象类的对象,在这种情况下,我们可以定义所有抽象方法以及new关键字。

抽象类的例子

//用抽象关键字声明一个抽象类
abstract class AbstractClass {
    //声明一个没有实现的抽象方法
    abstract void printMethod();
}

public class ImplementedClass {
    public static void main(String[] args) {
        //创建抽象类的对象 
        //以及方法的实现。
        AbstractClass ac = new AbstractClass() {
            void printMethod() {
                System.out.println("Hi, We are in Java World");
            }
        };

        //调用抽象类方法
        ac.printMethod();
    }
}

输出结果

D:\Programs>javac ImplementedClass.java

D:\Programs>java ImplementedClass 
Hi, We are in Java World

注意:

  • 一个抽象类可能会或可能不会包含抽象方法

  • 我们不能将抽象方法声明为final,因为如果我们将一个类声明为final,那么我们将需要实现所有方法,然后才可以实现这些方法。

2)具体类

  • 我们并不需要前缀“抽象”在声明的具体类,如果我们包括“抽象的”类名之前的关键字那么它也将成为抽象的

  • 对于具体的类,我们可以使用new关键字直接创建此类的对象。

具体类示例

//用抽象关键字声明一个抽象类
abstract class AbstractClass {

    //声明一个没有实现的抽象方法
    abstract void printMethod();
}

//通过扩展抽象类定义具体类
class ConcreteClass extends AbstractClass {


    //实现抽象方法
    void printMethod() {
        System.out.println("Hi,We are in Java World");
    }
}

public class Main {
    public static void main(String[] args) {

        //直接使用new关键字创建具体类的对象。
        ConcreteClass cc = new ConcreteClass();
        
        //调用具体的类方法。
        cc.printMethod();
    }
}

输出结果

D:\Programs>javac Main.java

D:\Programs>java Main
Hi,We are in Java World

注意:

  • 对于具体类,它将不包含任何抽象方法,因为如果我们包含单个抽象方法,则该类将变为抽象。

  • 对于具体类,我们可以将该类声明为final,因为它不包含抽象方法,因此需要关心实现。