Java中抽象方法的用途是什么?
在任何编程语言中,抽象意味着向用户隐藏不相关的细节以仅关注基本细节以提高效率,从而降低复杂性。
在Java中,抽象是使用抽象类和方法实现的。
让我们进一步了解Java中的抽象方法。
什么是抽象类?
在任何编程语言中,用关键字abstract声明的类都称为抽象类。
抽象类捕获子类的共同特征,并且可能包含也可能不包含任何抽象方法。
它不能被实例化,只能被其子类用作超类。
下面列出了有关抽象类的一些关键点:
抽象类可以具有构造函数和静态方法
它可以具有最终方法,它们会强制子类不更改方法的主体
我们可以通过从另一个类继承抽象类来使用它,然后其中提供对抽象方法的实现
如果抽象类没有任何方法实现,最好使用接口
声明为抽象的类可能包含也可能不包含抽象方法。
但是,什么是抽象方法呢?
什么是抽象方法?
在抽象类中声明为没有主体(没有实现)的方法是一种"抽象方法"。
换句话说,如果我们希望一个类包含特定的方法,但是我们希望该方法的实际实现由子类确定,则可以将父类中的方法声明为抽象。
这是Java中抽象方法的外观:
abstract public void habitat();
抽象方法的主要特征
下面列出了抽象方法的主要功能:
抽象方法没有实现(主体),只是具有方法签名,如上例所示
如果类具有抽象方法,则应将其声明为抽象方法,反之亦然
代替花括号,抽象方法将在末尾使用分号(;)。
如果常规类扩展了抽象类,则该类必须必须实现该类的所有抽象方法,或者也必须将其声明为abstract
示例程序:Java中的抽象方法
查看示例程序,以了解如何使用抽象类和抽象方法实现抽象。
看一下
package MyPackage; //abstract class abstract class Animal{ String AnimalName = " "; Animal(String name) { this.AnimalName = name; } //declare non-abstract methods //it has default implementation public void BasicInfo(String details) { System.out.println(this.AnimalName + " " + details); } //abstract methods which will be //implemented by its subclass(es) abstract public void habitat(); abstract public void respiration(); } class Terrestrial extends Animal { //constructor Terrestrial(String name) { super(name); } @Override public void habitat() { System.out.println("leave on land and"); } @Override public void respiration() { System.out.println("respire through lungs or trachea. "); } } class Aquatic extends Animal { //constructor Aquatic(String name) { super(name); } @Override public void habitat() { System.out.println("It leaves in water and"); } @Override public void respiration() { System.out.println("respire through gills or their skin. "); } } class AbstractClassDemo { public static void main (String[] args) { //creating the Object of Terrestrial class //and using Animal class reference. Animal object1 = new Terrestrial("Humans"); object1.BasicInfo("are terrestrial beings, they "); object1.habitat(); object1.respiration(); System.out.println(" "); //creating the Objects of circle class Animal object2 = new Aquatic("Fishes"); object2.BasicInfo("are aqautic beings, they "); object2.habitat(); object2.respiration(); } }
方法BasicInfo()是地面类和水生类都使用的一种具体方法。
方法habitat()和respiration()是抽象方法,它们没有任何实现,只是签名。
陆地类和水生类必须为这两种方法提供自己的实现。
另外,请注意,这两种方法都以关键字abstract开头。
在这一点上,我们可能想知道抽象类与接口有何不同。
Java接口
在Java中实现抽象的另一种方法是使用接口。
接口是抽象方法的集合,与抽象类不同,它没有任何具体方法。
但是与抽象类不同,接口提供了Java中的完整抽象。
它可以像类一样具有方法和变量。
但是,默认情况下,在接口中声明的方法是抽象的。
抽象类和接口是Java编程语言的两个主要构建块。
尽管两者都主要用于抽象,但是它们彼此非常不同,并且不能互换使用。