Java抽象類和接口的區(qū)別詳情
1、抽象類 vs 接口?
- 方法類型: 接口只能有抽象方法。抽象類可以有抽象和非抽象方法。從 Java 8 開始,它也可以有默認(rèn)和靜態(tài)方法。
- 最終變量: 在 Java 接口中聲明的變量默認(rèn)是最終的。抽象類可能包含非最終變量。
- 變量類型: 抽象類可以有final、
non-final、靜態(tài)和非靜態(tài)變量。接口只有靜態(tài)和最終變量。 - 實(shí)現(xiàn): 抽象類可以提供接口的實(shí)現(xiàn)。接口不能提供抽象類的實(shí)現(xiàn)。
- 繼承 vs 抽象:? Java 接口可以使用關(guān)鍵字“
implements”來實(shí)現(xiàn),抽象類可以使用關(guān)鍵字“extends”進(jìn)行擴(kuò)展。 - 多重實(shí)現(xiàn): 一個接口只能擴(kuò)展另一個Java接口,一個抽象類可以擴(kuò)展另一個Java類并實(shí)現(xiàn)多個Java接口。
- 數(shù)據(jù)成員的可訪問性: 默認(rèn)情況下,Java 接口的成員是公共的。Java 抽象類可以具有私有、受保護(hù)等類成員。
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)類進(jìn)行擴(kuò)展。 - 您可以在抽象類中定義非靜態(tài)或非最終字段,以便您可以通過方法訪問和修改它們所屬的對象的狀態(tài)。
- 您可以期望擴(kuò)展抽象類的類具有許多公共方法或字段,或者需要除
public之外的訪問修飾符(例如protected和private)。
如果以下任何陳述適用于您的情況,請考慮使用接口:??
- 它是一個完全的抽象,接口中聲明的所有方法都必須由實(shí)現(xiàn)此接口的類來實(shí)現(xiàn)。
- 一個類可以實(shí)現(xiàn)多個接口。它被稱為多重繼承。
- 您想指定特定數(shù)據(jù)類型的行為,但不關(guān)心誰實(shí)現(xiàn)其行為。
到此這篇關(guān)于Java抽象類和接口的區(qū)別詳情的文章就介紹到這了,更多相關(guān)Java抽象類和接口的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Cloud Gateway組件的三種使用方式實(shí)例詳解
Spring Cloud Gateway是 Spring 官方基于 Spring5.0 、 SpringBoot2.0 和 Project Reactor 等技術(shù)開發(fā)的網(wǎng)關(guān)旨在為微服務(wù)框架提供一種簡單而有效的統(tǒng)一的API 路由管理方式,統(tǒng)一訪問接口,這篇文章主要介紹了Spring Cloud Gateway組件的三種使用方式,需要的朋友可以參考下2024-01-01
SpringCloud openfeign相互調(diào)用實(shí)現(xiàn)方法介紹
在springcloud中,openfeign是取代了feign作為負(fù)載均衡組件的,feign最早是netflix提供的,他是一個輕量級的支持RESTful的http服務(wù)調(diào)用框架,內(nèi)置了ribbon,而ribbon可以提供負(fù)載均衡機(jī)制,因此feign可以作為一個負(fù)載均衡的遠(yuǎn)程服務(wù)調(diào)用框架使用2022-11-11
java 重定義數(shù)組的實(shí)現(xiàn)方法(與VB的ReDim相像)
java 重定義數(shù)組的實(shí)現(xiàn)方法(與VB的ReDim相像),需要的朋友可以參考一下2013-04-04
Java基礎(chǔ)之Unsafe內(nèi)存操作不安全類詳解
Java是面向?qū)ο笳Z言,在使用Java編程時,大多數(shù)情況下都不會直接操作內(nèi)存,而且Java也不提倡直接操作內(nèi)存,但是Java中到底有沒有可以直接操作內(nèi)存的工具類呢?有!Java中提供Unsafe類可以用來來直接操作內(nèi)存,文中詳細(xì)介紹了Unsafe內(nèi)存操作不安全類,需要的朋友可以參考下2021-06-06
LibrarySystem圖書管理系統(tǒng)開發(fā)(一)
這篇文章主要為大家詳細(xì)介紹了LibrarySystem圖書管理系統(tǒng)開發(fā),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Spring Cloud超詳細(xì)i講解Feign自定義配置與使用
這篇文章主要介紹了SpringCloud Feign自定義配置與使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
IntelliJ IDEA 2021.1 EAP 4 發(fā)布:字體粗細(xì)可調(diào)整Git commit template 支持
這篇文章主要介紹了IntelliJ IDEA 2021.1 EAP 4 發(fā)布:字體粗細(xì)可調(diào)整,Git commit template 支持,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02

