首頁 类库下载 java类库 java抽象類別和接口

java抽象類別和接口

Oct 31, 2016 pm 02:11 PM
java 介面

 一、抽象類別

    我們知道,物件是透過類別來產生的,但是並非所有的類別都可以描述特定的物件。

    如果一個類別中不包含足夠的資訊來描述特定的對象,就成為了抽象類別。抽象類別是對一類有著相同特徵,但細節上卻有著不同表現的物件的抽象。例如,鳥類都會叫,但是不同的鳥叫法一定是不同的,可以抽像出「叫」這個概念。

    定義下面一個鳥類:

public abstract class Bird {
    private String color;
 
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public Bird(){
    }
    public abstract void sing();//鸣叫
}
//喜鹊
class  Magpie extends Bird{
public void sing() {
System.out.println("I can sing in a whisper. ");
}
}
登入後複製

抽象類別特徵:

(1)抽象類別用abstract關鍵字修飾

(2)抽象類別中的抽象方法用abstract進行修飾,沒有方法(

(2)抽象類別中的抽象方法用abstract實現具體方法(具體方法)。

(3)抽象類別可以包含非抽象方法

(4)抽象類別可以不包含抽象方法(設計成抽象類別就沒什麼意義了吧。。。),但包含抽象方法的類別一定是抽象類別

(5)抽象類別本質也是類,只能單繼承

(6)抽象類別不能實例化,不能new。我們前面說它不描述特定的對象,肯定也不能實例化了

(7)抽象類別可以有實例變數和建構方法

 

二、介面

    介面是一組方法特徵的集合,是介面

    介面是一組方法特徵的集合,是介面

    介面是一組方法特徵的集合,是介面

    介面是一組方法特徵的集合,是介面

    介面是一組方法特徵的集合,是介面

  契約,規定了你可以做什麼。軟體設計過程中要依賴抽象,而非具體實作。

    像我們電腦上的usb接口,無論你是硬碟、u盤、還是手機,只要你實現了usb規定的接口,便能夠聯通電腦。

    上面抽象類別的例子中,我想加入一個「飛」的功能,考慮到並非所有的鳥都會飛,例如:企鵝,鴕鳥,鴨子等等,該怎麼辦呢?

    修改抽象類別肯定是不合適的:1.違反開閉原則,2:會使得所有的子類別都繼承到「飛」這一功能,我們會看到滿天的鴨子在飛了^_^ 。

    我們可以定義下面一個介面:

public interface IFly {
void fly();
 }
登入後複製

//喜鵲可以實現IBird中的介面:

class  Magpie extends Bird implements IFly {
public void sing() {
System.out.println("I can sing in a whisper. ");
}
        public void fly(){
            System.out.println("我会飞了!");
        }
}
登入後複製
    喜鵲實現了IFly中的介面,終於可以飛起來了。

    那如果需要增加鳥類一個游泳的功能呢?自己去想。 。 。

介面的特徵:

    (1)修飾符:public,abstract,default(不寫)

    (2)關鍵字:interface

    (2)關鍵字:interface

  。

    (4)介面中的方法預設都是public abstract的,實作類別中必須使用public修飾。

    (5)介面中的所有方法都必須在實作類別(抽象類別除外)中實作。

    (6)介面中的變數預設為public static final的。

    (7)一個類別可以實現多個介面。

 

    三、應用場景

    1)抽象類別所體現的是「is a」的關係,如果某一些類別的實作有共同點,而個人化的方法則由各個子類別去實現。 🎜🎜    2)介面體現的是「like a」的關係,表現的是不同類別物件在行為上的抽象。例如飛機和鳥都會飛,可以抽離出飛的接口,但他們非同類。 🎜🎜    3)在軟體設計中,當你需要介面與實作分離,封裝變化的時候,面向介面程式設計顯得特別重要。 🎜🎜    例如Ioc思想,客戶端不關心你具體是什麼類,具體對象由容器來注入。 🎜🎜    再比如兩個系統交互,良好的設計是雙方提供接口,不關心內部實現,減少耦合性的同時,封裝了變化。 🎜🎜    許多設計原則、設計想法以及設計模式都體現出介面程式設計的重要性:開閉原則,介面隔離,依賴倒置,適配器模式等等。 🎜🎜🎜🎜
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java 中的平方根 Java 中的平方根 Aug 30, 2024 pm 04:26 PM

Java 中的平方根

Java 中的完美數 Java 中的完美數 Aug 30, 2024 pm 04:28 PM

Java 中的完美數

Java 中的隨機數產生器 Java 中的隨機數產生器 Aug 30, 2024 pm 04:27 PM

Java 中的隨機數產生器

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java中的Weka

Java 中的阿姆斯壯數 Java 中的阿姆斯壯數 Aug 30, 2024 pm 04:26 PM

Java 中的阿姆斯壯數

Java 中的史密斯數 Java 中的史密斯數 Aug 30, 2024 pm 04:28 PM

Java 中的史密斯數

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

Java Spring 面試題

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

突破或從Java 8流返回?

See all articles