Java中抽象方法的用途是什么?

时间:2020-02-23 14:33:53  来源:igfitidea点击:

在任何编程语言中,抽象意味着向用户隐藏不相关的细节以仅关注基本细节以提高效率,从而降低复杂性。
在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编程语言的两个主要构建块。
尽管两者都主要用于抽象,但是它们彼此非常不同,并且不能互换使用。