面向?qū)ο?抽象類與接口

抽象類-求圖形面積
多個類,有相同的方法,可以抽出一個父類出來,把相同的方法放到父類當(dāng)中

1.每一個圓形都有面積
不同圖形求面積的算法不一樣
每一個圖形子類,都必須覆蓋這個方法,在每個里面寫上自己的方法體

2.在這個圖形類當(dāng)中,定義了getArea方法,因為不同的圖形的算法是不一樣的
父類不知道方法體里面該怎么寫,本來不需要方法體的

子類必須得要覆蓋此方法
在定義的時候,不要方法體了{...}
class Graph {
    Double getArea() {
        return 0.0;
    }
}

// 圓形
class Circle extends Graph {

    private Integer r;

    Circle(Integer r) {
        this.r = r;
    }

    // 求面積
    Double getArea() {
        return 3.14 * r * r;
    }
}

// 矩形
class Rectangle extends Graph {
    private Double width;
    private Double height;

    Rectangle(Double width, Double height) {
        this.width = width;
        this.height = height;
    }

    Double getArea() {

        return this.width * this.height;

    }

}

// 三角形
class Triangle extends Graph {
    private Integer a;
    private Integer b;
    private Integer c;

    Triangle(Integer a, Integer b, Integer c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }
    

}

public class Test {

    // 求圓,矩形,三角形面積

    public static void main(String[] args) {

        Circle cir = new Circle(233);
        System.out.println(cir.getArea());

        Rectangle r = new Rectangle(12.5, 123.3);
        System.out.println(r.getArea());

        
        Triangle t = new Triangle(12, 22, 33);
        System.out.println(t.getArea());//0.0
    }

}

抽象方法
在方法前面添加了一個關(guān)鍵字abstract
特點:
1.抽象方法是沒有方法體的
2.抽象方法要定義在抽象當(dāng)中 或 接口 (在類前面添加上一個abstract 就成為了抽象類)
3.抽象方法不能是私有的private,不能使用final修飾,不能同時使用static

只要使用了抽象方法,子類必須要覆蓋此方法,抽象方法沒有方法體

abstract class Graph {
    abstract Double getArea();//抽象方法
}

抽象類
其實是一個不完整的類,需要作為一個父類,子類才能完成對應(yīng)的功能
抽象類必須得要有子類才行(抽象類一般都當(dāng)作父類來繼承 )
抽象類當(dāng)中的注意點:
1.抽象類是不能直接創(chuàng)建對象的,但是抽象類有構(gòu)造器
2.抽象類中可以有抽象方法,也可以有非抽象方法(普通方法)
3.子類沒有去覆蓋抽象方法 把子類也變成抽象類
4.構(gòu)造方法不能定義為私有的(抽象方法必須得要讓子類繼承之后,才能實現(xiàn)內(nèi)部的方法體
子類繼承的話,先去調(diào)用父類的構(gòu)造方法
)
5.抽象類不能使用final來去修飾

命名:抽象類命名時,都喜歡在前面加上一個Abstract

抽象類與普通類有什么區(qū)別?
普通的類你有的(方法,字段,構(gòu)造器),抽象類都有
抽象類不能創(chuàng)建對象,抽象類可以包含抽象方法,也可以包含非抽象方法

抽象類必須得有子類才有意義






接口概念
什么是接口?
硬件接口:指的是兩個硬件設(shè)備之間的連接方式.硬件接口既包括物理上的接口,比如我們所說的usb接口
在java中,接口表示一種規(guī)范/約束/要求實現(xiàn)者必須遵守該規(guī)范:用來約束使用者應(yīng)該怎么做


接口是一種規(guī)范


在java中接口也是表示一種規(guī)范,使用抽象方法來定義一組功能
必須要實現(xiàn)者給提供方法的實現(xiàn)(誰遵守誰提供方法)

接口的定義 命名規(guī)范:在名字前面添加I 在后面添加able

 例如:IUsbable
interface    接口名稱{

} //像類一樣定義,接口也會生成對應(yīng)的字節(jié)碼

接口是一個特殊的抽象類 內(nèi)部的abstract 可以省略不寫
如果沒有在方法面前添加abstract 會在編譯時自動添加上

interface IUsbable{
    //接口
     String name = "wzb";  //默認是  public static final 常量
     void trans();
     //public abstract void trans();
}

接口注意點
1.接口是沒有構(gòu)造器的,接口是不能創(chuàng)建對象的
2.接口當(dāng)中定義變量,都是全局的靜態(tài)常量
String name = "myxq";
通過反編譯工具之后查看
public static final String name;
3.接口當(dāng)中定義的方法都是公共的抽象的方法

void trans();
//public abstract void trans();

4.接口當(dāng)中可以定義內(nèi)部類,內(nèi)部類也是public abstract
5.接口是可以繼承的,他是可以多繼承的
interface 接口名稱 extends 繼承的接口名,繼承的接口名
類是不能多繼承的
接口繼承的時候,不會去覆蓋父接口的方法

//爬行動物
interface IWorkable {
    // 接口
    void walk();

}

// 水生動物
interface ISwimable {
    void swim();
}

// 兩棲動物
interface Iamphibiousable extends ISwimable, IWorkable {

}

接口的實現(xiàn)
類名 extends 其他的類(只能繼承一個類) implements 接口(可以多個接口)

class Cat extends Animal implements IWorkable,ISwimable {}
貓類繼承了動物類實現(xiàn)了 IWorkable ,ISwimable  多個接口

在是實現(xiàn)類當(dāng)中必須得要去覆蓋接口當(dāng)中定義的方法
實現(xiàn)類的方法必須是public

        Cat cat= new Cat();
        cat.walk();
        
        interface IWolkable 接口也可以稱為它的父類   父接口

        多態(tài)寫法,把子類對象賦值給父類類型
        IWorkable cat1 = new Cat();//面向接口編程
        cat1.walk();         多態(tài)運行時表現(xiàn)出來的還是子類的特征  (編譯時,看左邊,運行時,看右邊)

接口流程
1.創(chuàng)建接口規(guī)范
2.定義接口實現(xiàn)類
3.創(chuàng)建對象

接口與抽象類的區(qū)別
相同點:
1.都是被其他類實現(xiàn)或者被繼承的(不然沒有存在的意義)
2.都不能實例化
3.都可以定義抽象方法,定義的抽象方法必須得要覆蓋.

不同點:
1.接口是沒有構(gòu)造器的,抽象類當(dāng)中是有構(gòu)造器的(有也不能實例化對象)
2.抽象類當(dāng)中可以包含普通方法和抽象方法,接口當(dāng)中只能有抽象方法,不能有普通方法(帶有方法體)
3.接口當(dāng)中默認成員變量,public static final 變量;靜態(tài)常量 抽象類當(dāng)中 默認是包訪問權(quán)限
4.方法:接口當(dāng)中默認方法 public abstract 方法名; 抽象類當(dāng)中 默認權(quán)限

接口當(dāng)中成員變量
interface IWalkable{
    String name ="wzb";
    void walk();
}
反編譯之后
interface IWalkable
{
    public static final String name = "wzb";

    public abstract void walk();
}

面向接口編程
面向接口編程:把實現(xiàn)類對象賦值給接口類型的變量
多態(tài)的好處:屏蔽了不同類之間實現(xiàn)的差異,從而達到通用編程

//主板插入各種usb設(shè)備
interface Iusb {

    (public abstract ) void swpData();

}

class MotherBoard {

    void puluginIn(Iusb usb) {
        usb.swpData();
    }

}

class Mouse implements Iusb {
    public void swpData() {
        System.out.println("鼠標移動");
    }
}

class KeyBoard implements Iusb {
    public void swpData() {
        System.out.println("打字");
    }
}

public class Test {

    public static void main(String[] args) {

        Iusb k = new KeyBoard();

        Iusb m = new Mouse();

        MotherBoard b = new MotherBoard();
        b.puluginIn(m);
        b.puluginIn(k);
    }

}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茁彭,老刑警劉巖猴抹,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妻往,死亡現(xiàn)場離奇詭異,居然都是意外死亡牺勾,警方通過查閱死者的電腦和手機赞弥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門勇劣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫁艇,“玉大人,你說我怎么就攤上這事履怯⊥叮” “怎么了拼窥?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蹋凝。 經(jīng)常有香客問我鲁纠,道長,這世上最難降的妖魔是什么鳍寂? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任改含,我火速辦了婚禮,結(jié)果婚禮上迄汛,老公的妹妹穿的比我還像新娘捍壤。我一直安慰自己,他們只是感情好鞍爱,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布鹃觉。 她就那樣靜靜地躺著,像睡著了一般睹逃。 火紅的嫁衣襯著肌膚如雪盗扇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機與錄音疗隶,去河邊找鬼佑笋。 笑死,一個胖子當(dāng)著我的面吹牛抽减,可吹牛的內(nèi)容都是我干的允青。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼卵沉,長吁一口氣:“原來是場噩夢啊……” “哼颠锉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起史汗,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤琼掠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后停撞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓷蛙,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年戈毒,在試婚紗的時候發(fā)現(xiàn)自己被綠了艰猬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡埋市,死狀恐怖冠桃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情道宅,我是刑警寧澤食听,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站污茵,受9級特大地震影響樱报,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泞当,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一迹蛤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧零蓉,春花似錦笤受、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至章喉,卻和暖如春汗贫,著一層夾襖步出監(jiān)牢的瞬間身坐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工落包, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留部蛇,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓咐蝇,卻偏偏與公主長得像涯鲁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子有序,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

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