抽象類(lèi)和接口

一什往、抽象類(lèi)

抽象:籠統(tǒng),模糊躯舔,看不懂省古!不具體

抽象類(lèi)的由來(lái):舉個(gè)栗子說(shuō)明

抽象類(lèi)的由來(lái)

抽象類(lèi):當(dāng)一個(gè)類(lèi)在描述事物時(shí),沒(méi)有足夠的信息去描述這個(gè)事物飒赃,就叫抽象類(lèi)

抽象類(lèi)的特點(diǎn)

1科侈、方法只有聲明沒(méi)有實(shí)現(xiàn)時(shí),該方法就是抽象方法臀栈,需要被abstract修飾
抽象方法必須定義在抽象類(lèi)中。該類(lèi)也必須被abstract修飾姑躲。
2睡扬、抽象類(lèi)不可以被實(shí)例化黍析。因?yàn)檎{(diào)用抽象方法沒(méi)意義。
3马靠、抽象類(lèi)必須有其子類(lèi)覆蓋所有的抽象方法后蔼两,該子類(lèi)才可以實(shí)例化,否則這個(gè)子類(lèi)還是抽象類(lèi)额划。

通過(guò)5個(gè)問(wèn)題來(lái)細(xì)說(shuō)抽象類(lèi)

1俊戳、抽象類(lèi)中有構(gòu)造函數(shù)嗎揖赴?

有品抽,用于給子類(lèi)對(duì)象初始化

2甜熔、抽象類(lèi)可以不定義抽象方法嗎?

可以盆昙,很少見(jiàn)
目的就是不讓該類(lèi)創(chuàng)建對(duì)象焊虏。有方法體,卻沒(méi)有內(nèi)容诵闭。
eg:AWT的適配器

3、抽象關(guān)鍵字不可以和哪些關(guān)鍵字共存瘟芝?

private 不行 抽象方法要被覆蓋褥琐,私有了子代都不知道去哪覆蓋?敌呈!
static 不行 抽象方法不需要對(duì)象造寝,因?yàn)榉椒w內(nèi)沒(méi)有內(nèi)容
final 不行 我要覆蓋abstract吭练,final不讓覆蓋,那不打架了么赐稽,共存?zhèn)€屁浑侥!
不能共存關(guān)鍵字編譯

4、抽象類(lèi)和一般類(lèi)的異同點(diǎn)括丁。

相同點(diǎn):都是描述事物伶选,都在內(nèi)部定義了成員
不同點(diǎn):一般類(lèi)有足夠的信息描述信息史飞;但抽象類(lèi)描述事物的信息不足仰税。
       一般類(lèi)中不能定義抽象方法;而抽象類(lèi)中可以定義抽象方法也可以定義非抽象方法
       一般類(lèi)可以被實(shí)例化吐绵;抽象類(lèi)不能被實(shí)例化

5河绽、抽象類(lèi)一定是一個(gè)父類(lèi)嗎?

是耙饰!
因?yàn)樾枰宇?lèi)覆蓋其方法后才可以對(duì)子類(lèi)實(shí)例化

用抽象類(lèi)來(lái)舉個(gè)栗子:

雇員:
需求:公司中程序員有姓名苟跪,工號(hào)廷痘,薪水件已,工作內(nèi)容。
項(xiàng)目經(jīng)理除了姓名鳞陨,工號(hào),薪水厦滤,工作內(nèi)容,還有獎(jiǎng)金享怀。
對(duì)給出需求進(jìn)行數(shù)據(jù)建模

//分析:先找出涉及的對(duì)象:程序員趟咆,項(xiàng)目經(jīng)理
//程序員
//     屬性:姓名,工號(hào)值纱,薪水。
     //行為:工作
//項(xiàng)目經(jīng)理
     //屬性:姓名搀愧,工號(hào)疆偿,薪水,獎(jiǎng)金杆故。
     //行為:工作
//程序員和項(xiàng)目經(jīng)理不存在這直接繼承關(guān)系
//但他們都是公司的雇員,可以將程序員和項(xiàng)目經(jīng)理進(jìn)行抽取饲趋,建立關(guān)系


//描述雇員
abstract class Employee
{
    private String name;
    private String id;
    private double pay;
    Employee(String name,String id,double pay)
    {
        this.name = name;
        this.id = id;
        this.pay = pay;
    }
    public abstract void work();
}

//描述程序員
class Programmer extends Employee
{
    Programmer(String name,String id,double pay)
    {
        super(name,id,pay);
    }
    public void work()
    {
        System.out.println("code...");
    }
}

//描述項(xiàng)目經(jīng)理
class Manager extends Employee
{
    private int bonus;
    Manager(String name,String id,double pay,int bonus)
    {
        super(name,id,pay);
        this.bonus = bonus;
    }
    public void work()
    {
        System.out.println("manage");
    }
}

二:接口(interface)

接口的由來(lái):當(dāng)抽象類(lèi)中的方法都是抽象的時(shí)候罢缸,這時(shí)可以將該抽象類(lèi)用另一種形式定義和表示,就是接口
就好像四條邊相等的長(zhǎng)方形叫正方形一樣

定義接口:關(guān)鍵字是interface不是class

interface Demo
{
}

接口中常見(jiàn)成員

全局常量

public static final

抽象方法

public abstract

由此看出接口中的成員都是公共的

由于接口里的都是抽象的,所以不用繼承叫實(shí)現(xiàn)息楔!

類(lèi)與類(lèi)之間叫繼承扒披,類(lèi)與接口之間叫實(shí)現(xiàn)!

接口不可以實(shí)例化
只能由實(shí)現(xiàn)了接口的子類(lèi)并覆蓋了接口中所有的抽象方法后碟案,該子類(lèi)才可以實(shí)例化。否則這個(gè)子類(lèi)就是一個(gè)抽象類(lèi)。

來(lái)個(gè)栗子說(shuō)明

interface Demo
{
       public static final int NUM = 4;
       public abstract void show1();
       public abstract void show2();
}
class DemoImp1 implements Demo//翻譯過(guò)來(lái)是:這個(gè)Demolmp1類(lèi)實(shí)現(xiàn)了Demo這個(gè)接口
{
public void show1()
{}
public void show2()
{
}
}
class InerfaceDemo
{
       public static void main(String[] args)
     {
          DemoImp1 d = new DemoImp1();  //不可以有 d.NUM = 3; 因?yàn)镹UM的值是final
          System.out.println(d.NUM);     //對(duì)象
          System.out.println(DemoImp1.NUM);    //子類(lèi)調(diào)用NUM成員
          System.out.println(Demo.NUM);    //接口Demo調(diào)用NUM成員
     }
}

運(yùn)行結(jié)果

面向?qū)ο笾姓f(shuō)過(guò)Java中不直接支持多繼承,因?yàn)闀?huì)出現(xiàn)調(diào)用的不確定性扮叨。
所以Java將多繼承機(jī)制改良,變成了多實(shí)現(xiàn)

一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口

多實(shí)現(xiàn)的體現(xiàn)

interface A
{
       public abstract void show();
}
interface B
{
       public abstract void show();
}
class Test implements A,B//多實(shí)現(xiàn)
{
    public void show()  //及覆蓋了A的中的show又覆蓋了B中的show
    {
        
    }
}
class InerfaceDemo
{
       public static void main(String[] args)
     {
         Test t = new Test();
         t.show();
     }
}

一個(gè)類(lèi)在繼承另一個(gè)類(lèi)的同時(shí)碍沐,還可以實(shí)現(xiàn)多個(gè)接口衷蜓。接口的出現(xiàn)避免了單繼承的局限性

interface A
{
       public abstract void show();
}
interface B
{
       public abstract void show();
}
class Q
{
    public void method()
    {}
}
class Test2 extends Q implements A,B   //test2繼承了Q 但還需要其他功能,
                                          //所以通過(guò)接口實(shí)現(xiàn)其他功能
                                        //先繼承再實(shí)現(xiàn)
{
    
}

接口和接口之間是繼承關(guān)系

總結(jié)一下:接口的特點(diǎn)

1、接口是對(duì)外暴露的規(guī)則  例如USB口
2刻恭、接口是程序的功能擴(kuò)展  
3扯夭、接口的出現(xiàn)降低耦合性
4、接口可以用來(lái)多實(shí)現(xiàn)
5交洗、接口和接口之間是繼承關(guān)系
6、類(lèi)和接口是實(shí)現(xiàn)關(guān)系构拳,而且類(lèi)可以繼承一個(gè)類(lèi)的同時(shí)實(shí)現(xiàn)多個(gè)接口

三、抽象類(lèi)和接口的異同點(diǎn)

相同點(diǎn):都是不斷向上抽取而來(lái)的

不同點(diǎn):
1斗埂、抽象類(lèi)需要被繼承凫海,而且只能單繼承
接口需要被實(shí)現(xiàn),而且可以多實(shí)現(xiàn)
2行贪、抽象類(lèi)中可以定義抽象方法和非抽象方法,子類(lèi)繼承后崭捍,可直接使用非抽象方法
接口中只能定義抽象方法啰脚,必須由子類(lèi)去實(shí)現(xiàn)
3、抽象類(lèi)的繼承,是is a關(guān)系亮航。在定義該體系的基本共性?xún)?nèi)容谍倦。
接口的實(shí)現(xiàn)是 like a關(guān)系。在定義體系額外功能昼蛀。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仇哆,隨后出現(xiàn)的幾起案子夫植,更是在濱河造成了極大的恐慌,老刑警劉巖详民,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沈跨,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡饿凛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)心肪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)纠吴,“玉大人,你說(shuō)我怎么就攤上這事呜象。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵休玩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我拴疤,道長(zhǎng),這世上最難降的妖魔是什么呐矾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任蜒犯,我火速辦了婚禮,結(jié)果婚禮上罚随,老公的妹妹穿的比我還像新娘。我一直安慰自己淘菩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布狭郑。 她就那樣靜靜地躺著汇在,像睡著了一般。 火紅的嫁衣襯著肌膚如雪趾疚。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天辛孵,我揣著相機(jī)與錄音赡磅,去河邊找鬼。 笑死冶匹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嚼隘。 我是一名探鬼主播袒餐,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谤狡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼卧檐!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起霉囚,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤盈罐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后暖呕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓤逼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年库物,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戚揭。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡民晒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出潜必,到底是詐尸還是另有隱情,我是刑警寧澤磁滚,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站维雇,受9級(jí)特大地震影響晒他,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜陨仅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一耕陷、第九天 我趴在偏房一處隱蔽的房頂上張望据沈。 院中可真熱鬧饺蔑,春花似錦、人聲如沸猾警。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)穴墅。三九已至,卻和暖如春玄货,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背松捉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工隘世, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留可柿,地道東北人丙者。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像永票,于是被迫代替她去往敵國(guó)和親滥沫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侣集,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • abstract class和interface是Java語(yǔ)言中對(duì)于抽象類(lèi)定義進(jìn)行支持的兩種機(jī)制世分,正是由于這兩種機(jī)...
    shenshizhong閱讀 2,963評(píng)論 4 23
  • 先來(lái)看看抽象類(lèi)和接口的定義: 抽象類(lèi)(abstract class): 使用abstract修飾符修飾的類(lèi)缀辩。官方點(diǎn)...
    IT廢柴閱讀 53,741評(píng)論 7 45
  • 1. 抽象類(lèi) 什么是抽象類(lèi) 包含一個(gè)抽象方法的類(lèi)就是抽象類(lèi) 抽象方法 聲明而未被實(shí)現(xiàn)的方法,抽象方法必須使用abs...
    FantJ閱讀 1,362評(píng)論 0 5
  • Java中畅蹂,有兩種實(shí)現(xiàn)OOP(Object Oriented Programming)編程的方法:抽象,接口液斜。 f...
    Arya鑫閱讀 496評(píng)論 0 1
  • 老舊的鐵窗銹跡斑駁 被稱(chēng)為解藥的氟西汀撒了一地生冷 凌亂不堪狼狽到極致 舊病復(fù)發(fā)愈演愈烈 像活在夢(mèng)里 一層透明白紗...
    浮山閱讀 584評(píng)論 0 0