本文重點介紹了 Java 中類和接口之間的區別。它們在語法上看起來很相似,都包含方法和變量,但它們在很多方麵都有所不同。
類和接口之間的區別
下表列出了 Java 語言中接口和類之間的所有主要區別:
Class |
Interface |
---|---|
用於創建類的關鍵字是“class” | 用於創建接口的關鍵字是“interface” |
類可以被實例化,即可以創建類的對象。 | 接口無法實例化,即無法創建對象。 |
類不支持多重繼承。 | 該接口支持多個inheritance. |
它可以從另一個類繼承。 | 它不能繼承類。 |
它可以使用關鍵字‘extends’被另一個類繼承。 | 它可以通過使用關鍵字 ‘implements’ 被類繼承,也可以通過使用關鍵字 ‘extends’ 被接口繼承。 |
它可以包含構造函數。 | 它不能包含構造函數。 |
它不能包含抽象方法。 | 它僅包含抽象方法。 |
類中的變量和方法可以使用任何訪問說明符(public、private、default、protected)進行聲明。 | 接口中的所有變量和方法都聲明為公共的。 |
類中的變量可以是 static、final 或兩者都不是。 | 所有變量都是靜態的和最終的。 |
Java 中的類
class 是用戶定義的藍圖或原型,用於創建對象。它表示一種類型的所有對象所共有的一組屬性或方法。一般來說,類聲明可以包含這些組件,按順序:
- 修飾符:類可以是公共的或具有默認訪問權限(請參閱這個詳情)。
- 類名稱:名稱應以首字母開頭(按照慣例大寫)。
- 超類(如果有):類的父類(超類)的名稱(如果有),前麵帶有關鍵字 extends。一個類隻能擴展(子類)一個父類。
- 接口(如果有):由類實現的接口的逗號分隔列表(如果有),前麵帶有關鍵字implements。一個類可以實現多個接口。
- Body:類主體用大括號 { } 括起來。
構造函數用於初始化新對象。字段是提供類及其對象的狀態的變量,方法用於實現類及其對象的行為。
例子:
Java
// Java program to demonstrate Class
// Class Declaration
public class Dog {
// Instance Variables
String name;
String breed;
int age;
String color;
// Constructor Declaration of Class
public Dog(String name, String breed, int age,
String color)
{
this.name = name;
this.breed = breed;
this.age = age;
this.color = color;
}
// method 1
public String getName() { return name; }
// method 2
public String getBreed() { return breed; }
// method 3
public int getAge() { return age; }
// method 4
public String getColor() { return color; }
@Override public String toString()
{
return ("Hi my name is " + this.getName()
+ ".\nMy breed, age and color are "
+ this.getBreed() + ", " + this.getAge()
+ ", " + this.getColor());
}
public static void main(String[] args)
{
Dog tuffy
= new Dog("tuffy", "papillon", 5, "white");
System.out.println(tuffy.toString());
}
}
輸出
Hi my name is tuffy. My breed, age and color are papillon, 5, white
接口 Java 語
與類一樣,interface 可以具有方法和變量,但接口中聲明的方法默認是抽象的(隻有方法簽名,沒有人)。
- 接口指定類必須做什麽而不是如何做。這是類的藍圖。
- 接口是關於函數的,就像播放器可以是接口一樣,任何實現播放器的類都必須能夠(或必須實現)move()。因此它指定了該類必須實現的一組方法。
- 如果一個類實現了一個接口並且沒有為接口中指定的所有函數提供方法體,則該類必須聲明為抽象的。
- Java 庫示例是 Comparator Interface 。如果一個類實現了這個接口,那麽它就可以用來對集合進行排序。
用法:
interface <interface_name> { // declare constant fields // declare methods that abstract // by default. }
例子:
Java
// Java program to demonstrate
// working of interface.
import java.io.*;
// A simple interface
interface in1 {
// public, static and final
final int a = 10;
// public and abstract
void display();
}
// A class that implements the interface.
class testClass implements in1 {
// Implementing the capabilities of
// interface.
public void display() { System.out.println("Geek"); }
// Driver Code
public static void main(String[] args)
{
testClass t = new testClass();
t.display();
System.out.println(a);
}
}
輸出
Geek 10
相關用法
- Java Integer divideUnsigned()用法及代碼示例
- Java Integer equals()用法及代碼示例
- Java Integer getInteger()用法及代碼示例
- Java Integer longValue()用法及代碼示例
- Java Integer max()用法及代碼示例
- Java Integer min()用法及代碼示例
- Java Integer numberOfLeadingZeros()用法及代碼示例
- Java Integer numberOfTrailingZeros()用法及代碼示例
- Java Integer parseInt()用法及代碼示例
- Java Integer parseUnsignedInt()用法及代碼示例
- Java Integer remainderUnsigned()用法及代碼示例
- Java Integer reverseBytes(int i)用法及代碼示例
- Java Integer toBinaryString()用法及代碼示例
- Java Integer toHexString()用法及代碼示例
- Java Integer toUnsignedLong()用法及代碼示例
- Java Integer toUnsignedString()用法及代碼示例
- Java Integer decode()用法及代碼示例
- Java Integer doubleValue()用法及代碼示例
- Java Integer floatValue()用法及代碼示例
- Java Integer hashCode()用法及代碼示例
- Java Integer highestOneBit()用法及代碼示例
- Java Integer intValue()用法及代碼示例
- Java Integer lowestOneBit()用法及代碼示例
- Java Integer.numberOfTrailingZeros()用法及代碼示例
- Java Integer reverse()用法及代碼示例
注:本文由純淨天空篩選整理自deepthisenthil大神的英文原創作品 Differences between Interface and Class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。