一、定義
1、介面:介面是一種抽象的類型,它定義了一組方法,但是沒有實現這些方法。只有定義,沒有具體實現,需要在具體的類中去實現。介面是Java世界中公認的一種標準,將介面作為主要的開發方式。可以通過介面來實現多態和解決相關問題,使代碼的耦合度大大降低,擴展性和復用性增強。
<public interface InterfaceName>
{
//介面中的聲明語句
}</public>
2、抽象類:抽象類是用來抽象化具有相似的屬性和方法的類的一種機制,它本身不能實例化,但是可以被子類繼承。抽象類中包含抽象方法,抽象方法必須在子類中實現,並且子類必須定義自己的一些特定方法。抽象類可以為具體子類提供一個通用的介面,可以避免代碼的重複性。
<public abstract class ClassName>
{
//類中的聲明語句
}</public>
二、使用
1、介面的使用:介面和類的繼承相似,但是介面沒有任何實現的方式,只是定義了一組規範。介面中的所有方法都是抽象的,必須由實現了介面的類來實現介面中的方法。
<interface Shape>
{
public void draw(); // 定義一個抽象方法
}</public>
// 實現介面
public class Rectangle implements Shape
{
public void draw()
{
System.out.println("Inside Rectangle::draw() method.");
}
}
// 調用實現的方法
public class Test
{
public static void main(String[] args)
{
Shape shape = new Rectangle(); // 多態
shape.draw();
}
}
2、抽象類的使用:抽象類不能實例化,必須被子類繼承來使用。抽象類的抽象方法必須由子類來實現,否則子類也必須變成抽象類。可以用抽象類作為多個子類的共同類型,使代碼更加靈活。
<abstract class Employee>
{
private String name;
private String address;
private int number;
// 構造函數
public Employee(String name, String address, int number)
{
System.out.println("Constructing an Employee");
this.name = name;
this.address = address;
this.number = number;
}
// 抽象方法
public abstract double computePay();
// 其他方法
public void mailCheck()
{
System.out.println("Mailing a check to " + this.name + " " + this.address);
}
// 其他方法
public String toString()
{
return name + " " + address + " " + number;
}
// 其他普通方法
public String getName()
{
return name;
}
}
// 子類Employee的實現
class Salary extends Employee
{
private double salary; // Annual salary
public Salary(String name, String address, int number, double salary)
{
super(name, address, number);
setSalary(salary);
}
public void mailCheck()
{
System.out.println("Within mailCheck of Salary class ");
System.out.println("Mailing check to " + getName()
+ " with salary " + salary);
}
public double getSalary()
{
return salary;
}
public void setSalary(double newSalary)
{
if(newSalary >= 0.0)
{
salary = newSalary;
}
}
public double computePay()
{
System.out.println("Computing salary pay for " + getName());
return salary/52;
}
}
public class AbstractDemo
{
public static void main(String [] args)
{
Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);
Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);
System.out.println("Call mailCheck using Salary reference --");
s.mailCheck();
System.out.println("\n Call mailCheck using Employee reference--");
e.mailCheck();
}
}
三、相同點
1、都是用來實現Java中的面向對象的概念,解決了代碼中的封裝、繼承和多態問題。
2、都可以包含方法和變數,這些方法和變數都有訪問許可權控制。
3、都不能直接實例化,都需要在具體的類中被實現或繼承。
四、不同點
1、介面中的所有方法都是抽象的,而抽象類中可以有部分方法是抽象的,也可以有非抽象的方法。
2、一個類可以實現多個介面,但是只能繼承一個抽象類。
3、介面中可以有常量,但是抽象類中沒有。
4、介面中方法的訪問許可權必須是public,而抽象類中可以有public、protected和默認訪問許可權。
5、抽象類中有構造函數,而介面中沒有。
五、總結
Java介面和抽象類都是實現面向對象中的封裝、多態、繼承等概念的重要手段。雖然它們有很多相似點,但是也有不同的地方,因此開發人員在實際編程中需要靈活使用,根據需求選擇適合的方式。在編寫代碼的時候,應該儘可能減少類之間的耦合,提高代碼的擴展性和復用性,從而提高代碼的維護性和可讀性。
原創文章,作者:WPEKU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/334755.html