【Java學(xué)習(xí)】抽象類|接口|抽象類和接口的區(qū)別|提供代碼在線運(yùn)行

心得感悟

今天講的內(nèi)容真的很少了搪桂,但我還是花了很多時(shí)間才能理解。我一開始覺得抽象類能做到的描扯,普通類也能做的定页,并不能理解抽象類的優(yōu)點(diǎn)。后面多方查閱資料還有問同學(xué)绽诚,才明白原來抽象類如此便捷好用典徊。了解了抽象類和接口的區(qū)別后杭煎,才發(fā)現(xiàn)原來它們這么相似,只要弄懂其中一個(gè)宫峦,肯定也能弄懂另一個(gè)岔帽。有的時(shí)候一個(gè)例子看不懂沒關(guān)系,再多找點(diǎn)例子导绷,總能看懂的犀勒。


1. 目的

  • 一、掌握抽象類的概念及用法
  • 二妥曲、掌握接口的概念及用法

2. 內(nèi)容簡概

  • 一贾费、抽象類的定義及用法
  • 二、接口的定義及用法
  • 三檐盟、抽象類和接口的區(qū)別

3. 具體內(nèi)容

  • 一褂萧、抽象類的定義及用法

1.概念:
抽象類是用來管理一些抽象內(nèi)容的類。簡單的說葵萎,使用了關(guān)鍵詞abstract聲明的類叫作“抽象類”导犹。其中用abstract修飾的方法叫做“抽象方法”。抽象方法與一般方法的不同之處在于羡忘,抽象方法只對方法作出聲明谎痢,但并沒有具體的實(shí)現(xiàn)內(nèi)容。

2. 定義規(guī)則:
(1) 抽象類和抽象方法必須用abstact關(guān)鍵字來修飾卷雕。
(2)抽象方法定義時(shí)节猿,只需要聲明,不需要實(shí)現(xiàn)
(3)含抽象方法的類必須被聲明為抽象類
(4)抽象類的子類必須實(shí)現(xiàn)所有的抽象方法后漫雕,才能被實(shí)例化滨嘱,若不想實(shí)現(xiàn)抽象方法,就定義它為抽象類浸间,否則會報(bào)錯(cuò)太雨。
(5)不能被實(shí)例化。如下面這個(gè)例子魁蒜,運(yùn)行時(shí)會報(bào)錯(cuò)躺彬,抽象方法是不能被實(shí)例化的。

public class MyClass {
    public static void main(String[] args){
          Person xw = new Person();//實(shí)例化
    }
}
abstract class Person{
      String name;
      public Person(String name){
            this.name = name;
            System.out.println(this.name);
      public abstract void work();
}

如果非要用梅惯,只能通過使用匿名類來調(diào)用抽象類宪拥,且這樣的調(diào)用只能使用一次。即將上面代碼中的Person xw = new Person();改為如下代碼铣减,必須使用抽象類中的抽象方法她君。

        Person xw = new Person(name:"小王"){
              @Override
              public void work() {};
        }

3. 什么時(shí)候用到抽象類?
我舉一個(gè)實(shí)際的例子葫哗,一個(gè)幾何圖形的類缔刹,它們都有一些相同的屬性如:長球涛、寬,都有周長校镐、面積等方法亿扁,但是不同的圖形有不同的計(jì)算周長、面積的公式鸟廓,也就是說从祝,同種方法有不同的實(shí)現(xiàn)代碼,這時(shí)就需要用到抽象類和抽象方法引谜。且抽象類和繼承緊密相關(guān)牍陌,

4. 抽象類和抽象方法的具體用法
(1)首先,我們創(chuàng)建一個(gè)管理圖形Shape的抽象類

public abstract class Shape
{
    public int width;    //幾何圖形的長
    public int height;    //幾何圖形的寬
    public Shape(int width,int height)
    {
        this.width = width;
        this.height = height;
    }
    public abstract double area();    //定義抽象方法员咽,計(jì)算面積
}

(2)然后定義一個(gè)正方形類毒涧,該類繼承Shape

public class Square extends Shape
{
    public Square(int width,int height)
    {
        super(width,height);
    }
    //重寫父類中的抽象方法,實(shí)現(xiàn)計(jì)算正方形面積的功能
    @Override
    public double area()
    {
        return width*height;
    }
}

(3)再定義一個(gè)三角形類贝室,該類同樣繼承Shape

public class Triangle extends Shape
{
    public Triangle(int width,int height)
    {
        super(width, height);
    }
    //重寫父類中的抽象方法契讲,實(shí)現(xiàn)計(jì)算三角形面積的功能
    @Override
    public double area()
    {
        return 0.5*width*height;
    }
}

(4) 最后創(chuàng)建一個(gè)測試類,分別創(chuàng)建正方形類和三角形類的對象滑频,并調(diào)用各類中的 area() 方法怀泊,打印出不同形狀的幾何圖形的面積。

public class ShapeTest
{
    public static void main(String[] args)
    {
        Square square = new Square(5,4);    //創(chuàng)建正方形類對象
        System.out.println("正方形的面積為:"+square.area());
        Triangle triangle = new Triangle(2,5);    //創(chuàng)建三角形類對象
        System.out.println("三角形的面積為:"+triangle.area());
    }
}

(5)運(yùn)行結(jié)果如下:

正方形的面積為:20.0
三角形的面積為:5.0
  • 二误趴、接口的定義及用法

1. 概念:
接口(interface)就是定義一套方法/規(guī)則,用于對象之間的通信务傲。有點(diǎn)類似于房屋中介或者USB凉当,就是用于連通雙方,并且規(guī)定以什么樣的形式連通售葡。比如房屋中介會制定好雙方的見面時(shí)間看杭,要求收取中介費(fèi)等。而USB會規(guī)定兩樣電器間只能傳輸文件或者只能查看信息等挟伙。同樣的楼雹,我們可以規(guī)定接口的方法。

2. 定義規(guī)則:
(1)可以定義內(nèi)部類
(2)不能定義變量
(3)不能定義代碼塊
(4)不能添加普通/對象/實(shí)例方法
(5)不能定義構(gòu)造方法尖阔,只有抽象方法
(6)使用implements實(shí)現(xiàn)一個(gè)接口
(7)默認(rèn)的變量都是static final 常量
(8)一個(gè)類可以實(shí)現(xiàn)多個(gè)接口贮缅,一個(gè)接口可以繼承多個(gè)接口

3. 什么時(shí)候用到接口?
就我目前的理解中介却,接口是面向?qū)ο髸r(shí)會用到的谴供。比如手機(jī)的操作界面,當(dāng)用戶點(diǎn)擊屏幕時(shí)齿坷,就需要一個(gè)接口來連通點(diǎn)擊事件和被點(diǎn)擊的應(yīng)用軟件桂肌。再比如手機(jī)通過數(shù)據(jù)線傳輸文件或者查看信息数焊,接口用來連接傳輸者和手機(jī),相當(dāng)于數(shù)據(jù)線崎场。

4. 接口的具體用法
(1)就上一點(diǎn)中的例子展開分析佩耳。首先,我們聲明一個(gè)USB接口谭跨,接口規(guī)定必須接口的兩個(gè)對象必須實(shí)現(xiàn)read()和write()這兩個(gè)方法干厚。

interface USB{
    //public abstract
    void read();

    //public abstract
    void write();
}

(2)然后我們定義一個(gè)手機(jī)的類和電腦的類來實(shí)現(xiàn)這個(gè)USB接口,實(shí)現(xiàn)就是去用它饺蚊。

class Computer implements USB{
      @Override
      public void read() {
          System.out.println("電腦正在通過USB功能讀取數(shù)據(jù)");
      }
      @Override
      public void write() {
          System.out.println("電腦正在通過USB功能寫入數(shù)據(jù)");
      }
}
class Phone implements USB{
      @Override
      public void read() {
          System.out.println("手機(jī)正在通過USB功能讀取數(shù)據(jù)");
      }
      @Override
      public void write() {
          System.out.println("手機(jī)正在通過USB功能寫入數(shù)據(jù)");
      }
}

(3)最后我們定義一個(gè)主類來看看運(yùn)行效果

public class Test{
      public static void main(String[] args){
            Computer computer = new Computer();
            computer.read();
            computer.write();
            Phone phone = new Phone();
            phone.read();
            phone.write();
      }
}

(4)運(yùn)行結(jié)果如下:

電腦正在通過USB功能讀取數(shù)據(jù)
電腦正在通過USB功能寫入數(shù)據(jù)
手機(jī)正在通過USB功能讀取數(shù)據(jù)
手機(jī)正在通過USB功能寫入數(shù)據(jù)
  • 三萍诱、抽象類和接口的區(qū)別

抽象類和接口里面都有抽象方法,不知道你會不會有一種感覺污呼,雖然它們的關(guān)鍵字不同裕坊,但感覺它們兩個(gè)很相似。如果你對此感到困惑或者容易混淆二者燕酷,可以點(diǎn)擊以下網(wǎng)頁查看講解籍凝,我認(rèn)為這個(gè)網(wǎng)頁中的講解還是很清晰明了的。

?

4. 親手練一練

1. 俗話說實(shí)踐出真知苗缩,紙上談兵不如親自刀槍上陣饵蒂,可以在下面的在線代碼運(yùn)行界面自己運(yùn)行一下,還可以改改代碼酱讶,便于加深理解退盯。

(1)抽象類的用法

(2)接口的用法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市泻肯,隨后出現(xiàn)的幾起案子渊迁,更是在濱河造成了極大的恐慌,老刑警劉巖灶挟,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琉朽,死亡現(xiàn)場離奇詭異,居然都是意外死亡稚铣,警方通過查閱死者的電腦和手機(jī)箱叁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惕医,“玉大人耕漱,你說我怎么就攤上這事√牛” “怎么了孤个?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沛简。 經(jīng)常有香客問我齐鲤,道長斥废,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任给郊,我火速辦了婚禮牡肉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淆九。我一直安慰自己统锤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布炭庙。 她就那樣靜靜地躺著饲窿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪焕蹄。 梳的紋絲不亂的頭發(fā)上逾雄,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機(jī)與錄音腻脏,去河邊找鬼鸦泳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛永品,可吹牛的內(nèi)容都是我干的做鹰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼鼎姐,長吁一口氣:“原來是場噩夢啊……” “哼钾麸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起炕桨,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤饭尝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后谋作,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乎芳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年遵蚜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奈惑。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吭净,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肴甸,到底是詐尸還是另有隱情寂殉,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布原在,位于F島的核電站友扰,受9級特大地震影響彤叉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜村怪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一秽浇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧甚负,春花似錦柬焕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至病涨,卻和暖如春富玷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背没宾。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工凌彬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人循衰。 一個(gè)月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓铲敛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親会钝。 傳聞我的和親對象是個(gè)殘疾皇子伐蒋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349

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

  • 今日任務(wù): 1,能夠獨(dú)立使用抽象類 2迁酸,能夠獨(dú)立使用多態(tài) 3先鱼,能夠獨(dú)立使用接口 4,能夠理解適配器設(shè)計(jì)模式 1. ...
    Villain丶Cc閱讀 1,353評論 0 17
  • 一、抽象類 1串远、抽象類含義的概括: 當(dāng)多個(gè)類出現(xiàn)相同功能時(shí)宏多,但功能主體不同,這樣可以向上抽取澡罚,抽取時(shí)只抽取功能定義...
    玉圣閱讀 828評論 0 6
  • 整理來自互聯(lián)網(wǎng) 1伸但,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境留搔,java的開發(fā)工具...
    Ncompass閱讀 1,537評論 0 6
  • 最近天氣有點(diǎn)回潮了更胖,很煩,讓人很不舒服,走到哪里都是濕濕的却妨。屋子里太冷饵逐,外面的熱空氣進(jìn)到屋子里就變成水珠,哎管呵,真是...
    noora_閱讀 524評論 0 3
  • 看過了本文捐下,你又多了一個(gè)兼職账锹,叫安慰師。 01 早早早坷襟,今天說一個(gè)安慰的話題奸柬。 女友心煩,閨蜜被甩了婴程,朋友受傷欲哭...
    說話哥閱讀 1,030評論 0 0