Java 中抽象类和抽象方法的区别
抽象是只适用于方法和类的修饰符,不适用于变量。即使我们没有实现,我们仍然可以用抽象修饰符声明一个方法。也就是说,抽象方法只有声明,没有实现。因此,抽象方法声明应该强制以分号结束。
插图:
public abstract void methodOne(); ------>valid
public abstract void methodOne(){} ------->Invalid
示例:
Java 语言(一种计算机语言,尤用于创建网站)
// Java Program to illustrate Abstract class
// Abstract Class
// Main class
abstract class GFG {
// Main driver method
public static void main(String args[])
{
// Creating object of class inside main() method
GFG gfg = new GFG();
}
}
输出:
输出解释:
如果一个类包含至少一个抽象方法,那么必须用抽象修饰符声明相应的类。因为实现不完整,所以我们不能创建该类的对象。
即使该类不包含任何抽象方法,我们仍然可以将该类声明为抽象类,它是一个抽象类,可以包含零个抽象方法。
插图 1:
class Parent
{ // Method of this class
public void methodOne();
}
输出:
Compile time error.
missing method body, or declared abstract
public void methodOne();
插图 2:
class parent {
// Method of this class
public abstract void methodOne() {}
}
输出:
Compile time error.
abstract method cannot have a body.
public abstract void methodOne(){}
插图 3:
class parent {
// Method of this class
public abstract void methodOne();
}
输出:
Compile time error.
Parent is not abstract and does not override abstract method methodOne() in Parent class
Parent
如果一个类扩展了任何抽象类,那么我们必须为父类的每个抽象方法提供实现,否则我们必须将子类声明为抽象类。
示例:
Java 语言(一种计算机语言,尤用于创建网站)
// Java Program to Illustrate Abstract Method
// Main class
// Abstract class
abstract class Parent {
// Methods of abstract parent class
public abstract void methodOne();
public abstract void methodTwo();
}
// Class 2
// Child class
class child extends Parent {
// Method of abstract child class
public void methodOne() {}
}
输出:
注意:如果我们声明孩子是抽象的,那么代码编译正常,但是孩子的孩子负责为 methodTwo()提供一个实现。
现在,让我们在充分了解两者之后,最终总结出它们之间的差异。
| 抽象类 | 抽象方法 | | --- | --- | | 抽象类不能被实例化。 | 抽象方法体必须为空。 | | 其他类扩展抽象类。 | 子类必须实现抽象类的抽象方法。 | | 既可以有抽象的方法,也可以有具体的方法。 | 在类中没有定义。 | | 类似于接口,但可以 * 实现方法 * 字段可以有各种访问修饰符 * 子类只能扩展一个抽象类 | 必须在派生类中实现。 |版权属于:月萌API www.moonapi.com,转载请注明出处