Java抽象類和接口的區(qū)別詳情
1、抽象類 vs 接口?
- 方法類型: 接口只能有抽象方法。抽象類可以有抽象和非抽象方法。從 Java 8 開始,它也可以有默認和靜態(tài)方法。
- 最終變量: 在 Java 接口中聲明的變量默認是最終的。抽象類可能包含非最終變量。
- 變量類型: 抽象類可以有final、
non-final、靜態(tài)和非靜態(tài)變量。接口只有靜態(tài)和最終變量。 - 實現(xiàn): 抽象類可以提供接口的實現(xiàn)。接口不能提供抽象類的實現(xiàn)。
- 繼承 vs 抽象:? Java 接口可以使用關(guān)鍵字“
implements”來實現(xiàn),抽象類可以使用關(guān)鍵字“extends”進行擴展。 - 多重實現(xiàn): 一個接口只能擴展另一個Java接口,一個抽象類可以擴展另一個Java類并實現(xiàn)多個Java接口。
- 數(shù)據(jù)成員的可訪問性: 默認情況下,Java 接口的成員是公共的。Java 抽象類可以具有私有、受保護等類成員。
import java.io.*;
abstract class Shape {
String objectName = " ";
Shape(String name) { this.objectName = name;
}
public void moveTo(int x, int y){
System.out.println(this.objectName + " "
+ "已移至"
+ " x = " + x + " and y = " + y);
}
abstract public double area();
abstract public void draw();
}
class Rectangle extends Shape {
int length, width;
Rectangle(int length, int width, String name){
super(name);
this.length = length;
this.width = width;
}
@Override public void draw(){
System.out.println("矩形已繪制");
}
@Override public double area(){
return (double)(length * width);
}
}
class Circle extends Shape {
double pi = 3.14;
int radius;
Circle(int radius, String name){
super(name);
this.radius = radius;
}
@Override public void draw(){
System.out.println("圓形已繪制");
}
@Override public double area(){
return (double)((pi * radius * radius) / 2);
}
}
class HY {
public static void main(String[] args){
Shape rect = new Rectangle(2, 3, "Rectangle");
System.out.println("矩形面積:"
+ rect.area());
rect.moveTo(1, 2);
System.out.println(" ");
Shape circle = new Circle(2, "Circle");
System.out.println("圓的面積:"
+ circle.area());
circle.moveTo(2, 4);
}
}
輸出:
矩形面積:6.0
矩形已移至 x = 1 和 y = 2
圓的面積:6.28
圓已移至 x = 2 和 y = 4
如果我們在矩形和圓形之間沒有任何通用代碼,請使用界面。
import java.io.*;
interface Shape {
void draw();
double area();
}
class Rectangle implements Shape {
int length, width;
Rectangle(int length, int width){
this.length = length;
this.width = width;
}
@Override public void draw(){
System.out.println("矩形已繪制");
}
@Override public double area(){
return (double)(length * width);
}
}
class Circle implements Shape {
double pi = 3.14;
int radius;
Circle(int radius) { this.radius = radius; }
@Override public void draw(){
System.out.println("圓形已繪制");
}
@Override public double area(){
return (double)((pi * radius * radius) / 2);
}
}
class HY {
public static void main(String[] args){
Shape rect = new Rectangle(2, 3);
System.out.println("矩形面積:"
+ rect.area());
Shape circle = new Circle(2);
System.out.println("圓的面積:"
+ circle.area());
}
}
輸出:
矩形面積:6.0
圓的面積:6.28
什么時候用什么?
如果以下任何陳述適用于您的情況,請考慮使用抽象類:??
- 在
java應(yīng)用程序中,有一些相關(guān)的類需要共享一些代碼行,那么你可以將這些代碼行放在抽象類中,并且這個抽象類應(yīng)該由所有這些相關(guān)類進行擴展。 - 您可以在抽象類中定義非靜態(tài)或非最終字段,以便您可以通過方法訪問和修改它們所屬的對象的狀態(tài)。
- 您可以期望擴展抽象類的類具有許多公共方法或字段,或者需要除
public之外的訪問修飾符(例如protected和private)。
如果以下任何陳述適用于您的情況,請考慮使用接口:??
- 它是一個完全的抽象,接口中聲明的所有方法都必須由實現(xiàn)此接口的類來實現(xiàn)。
- 一個類可以實現(xiàn)多個接口。它被稱為多重繼承。
- 您想指定特定數(shù)據(jù)類型的行為,但不關(guān)心誰實現(xiàn)其行為。
到此這篇關(guān)于Java抽象類和接口的區(qū)別詳情的文章就介紹到這了,更多相關(guān)Java抽象類和接口的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java 判斷一個數(shù)是否為2的整數(shù)次冪方法
今天小編就為大家分享一篇java 判斷一個數(shù)是否為2的整數(shù)次冪方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
Netty的Handler鏈調(diào)用機制及如何組織詳解
這篇文章主要為大家介紹了Netty的Handler鏈調(diào)用機制及如何組織示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
修改idea的這些啟動參數(shù),令你的idea健步如飛
這篇文章主要介紹了修改idea的這些啟動參數(shù),令你的idea健步如飛~具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
Spring?Boot?MQTT?Too?many?publishes?in?progress錯誤的解決方
本文介紹Spring?Boot?MQTT?Too?many?publishes?in?progress錯誤的解決方案,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下2022-07-07

