chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

全面講解?向?qū)ο缶幊倘?特性 1

jf_78858299 ? 來源:小牛呼嚕嚕 ? 作者:小牛呼嚕嚕 ? 2023-02-09 14:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

封裝

把客觀事物封裝成抽象的類,并且類可以把自己的數(shù)據(jù)和方法只讓可信的類或者對象操作,對不可信的進(jìn)行信息隱藏。封裝是面向?qū)ο蟮奶卣髦?,是對象和類概念的主要特性?/p>

通俗地說,一個類就是一個封裝了數(shù)據(jù)以及操作這些數(shù)據(jù)的代碼的邏輯實(shí)體。在一個對象內(nèi)部,某些代碼或某些數(shù)據(jù)可以是私有的,不能被外界訪問。

通過這種方式,對象對內(nèi)部數(shù)據(jù)提供了不同級別的保護(hù),以防止程序中無關(guān)的部分意外的改變或錯誤地使用了對象的私有部分。但是如果?個類沒有提供給外界訪問的?法,那么這個類也沒有什么意義了。

我們來看一個常見的 類,比如:Student

public class Student implements Serializable {
    
    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

將對象中的成員變量進(jìn)行私有化,外部程序是無法訪問的。對外提供了訪問的方式,就是set和get方法。

而對于這樣一個實(shí)體對象,外部程序只有賦值和獲取值的權(quán)限,是無法對內(nèi)部進(jìn)行修改

繼承

繼承 就是子類繼承父類的特征和行為,使得子類對象(實(shí)例)具有父類的實(shí)例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。

Java 中通過 extends 關(guān)鍵字可以申明一個類是從另外一個類繼承而來的,一般形式如下:

class 父類 {
}
 
class 子類 extends 父類 {
}

繼承概念的實(shí)現(xiàn)方式有二類:實(shí)現(xiàn)繼承接口繼承。

實(shí)現(xiàn)繼承是指直接使用基類的屬性和方法而無需額外編碼的能力

接口繼承是指僅使用屬性和方法的名稱、但是子類必須提供實(shí)現(xiàn)的能力

一般我們繼承基本類和抽象類用 extends 關(guān)鍵字,實(shí)現(xiàn)接口類的繼承用 implements 關(guān)鍵字。

注意點(diǎn):

通過繼承創(chuàng)建的新類稱為“子類”或“派生類”,被繼承的類稱為“基類”、“父類”或“超類”。

繼承的過程,就是從一般到特殊的過程。要實(shí)現(xiàn)繼承,可以通過“繼承”(Inheritance)和“組合”(Composition)來實(shí)現(xiàn)。

子類可以擁有父類的屬性和方法。

子類可以擁有自己的屬性和方法, 即?類可以對?類進(jìn)?擴(kuò)展。

子類可以重寫覆蓋父類的方法。

JAVA 只支持單繼承 ,即一個子類只允許有一個父類,但是可以實(shí)現(xiàn)多級繼承,及子類擁有唯一的父類,而父類還可以再繼承。

使用 implements 關(guān)鍵字可以變相的使java具有多繼承的特性,使用范圍為類繼承接口的情況,可以同時繼承多個接口(接口跟接口之間采用逗號分隔)。

# implements 關(guān)鍵字

public interface A {
    public void eat();
    public void sleep();
}
 
public interface B {
    public void show();
}
 
public class C implements A,B {
}

值得留意的是:關(guān)于父類私有屬性和私有方法的繼承 的討論

這個網(wǎng)上 有大量的爭論,我這邊以Java官方文檔為準(zhǔn):

With the use of the extends keyword, the subclasses will be able to inherit all the properties of the superclass except for the private properties of the superclass.

子類不能繼承父類的 私有屬性事實(shí)),但是如果子類中公有的方法影響到了父類私有屬性,那么私有屬性是能夠被子類使用的。

官方文檔 明確說明:privatefinal不被繼承,但從內(nèi)存的角度看的話:父類private屬性是會存在于子類對象中的。

通過繼承的方法(比如,public方法)可以訪問到父類的private屬性

如果子類中存在與父類private方法簽名相同的方法,其實(shí)相當(dāng)于覆蓋

個人覺得文章里的一句話很贊,我們不可能完全繼承父母的一切(如性格等),但是父母的一些無法繼承的東西卻仍會深刻的影響著我們。

多態(tài)

同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力就是 多態(tài) 。網(wǎng)上的爭論很多,筆者個人認(rèn)同網(wǎng)上的這個觀點(diǎn):重載也是多態(tài)的一種表現(xiàn),不過多態(tài)主要指運(yùn)行時多態(tài)

Java 多態(tài)可以分為 重載式多態(tài)重寫式多態(tài)

-重載式多態(tài),也叫編譯時多態(tài)。編譯時多態(tài)是靜態(tài)的,主要是指方法的重載,它是根據(jù)參數(shù)列表的不同來區(qū)分不同的方法。通過編譯之后會變成兩個不同的方法,在運(yùn)行時談不上多態(tài)。也就是說這種多態(tài)再編譯時已經(jīng)確定好了。

-重寫式多態(tài),也叫運(yùn)行時多態(tài)。運(yùn)行時多態(tài)是動態(tài)的,主要指繼承父類和實(shí)現(xiàn)接口時,可使用父類引用指向子類對象實(shí)現(xiàn)。 這個就是大家通常所說的多態(tài)性 。

這種多態(tài)通過動態(tài)綁定(dynamic binding)技術(shù)來實(shí)現(xiàn),是指在執(zhí)行期間判斷所引用對象的實(shí)際類型,根據(jù)其實(shí)際的類型調(diào)用其相應(yīng)的方法。也就是說,只有程序運(yùn)行起來,你才知道調(diào)用的是哪個子類的方法。這種多態(tài)可通過函數(shù)的重寫以及向上轉(zhuǎn)型來實(shí)現(xiàn)。

多態(tài)存在的三個必要條件:

繼承

重寫

父類引用指向子類對象:Parent p = new Child();

我們一起來看個例子,仔細(xì)品讀代碼,就明白了:

@SpringBootTest
class Demo2021ApplicationTests {

    class Animal {
        public void eat(){
            System.out.println("動物吃飯!");
        }
        public void work(){
            System.out.println("動物可以幫助人類干活!");
        }
    }

    class Cat extends Animal {
        public void eat() {
            System.out.println("吃魚");
        }
        public void sleep() {
            System.out.println("貓會睡懶覺");
        }
    }

    class Dog extends Animal {
        public void eat() {
            System.out.println("吃骨頭");
        }
    }

    @Test
    void contextLoads() {
        //part1
        Cat cat_ = new Cat();
        cat_.eat();
        cat_.sleep();
        cat_.work();

        //part2
        Animal cat=new Cat();
        cat.eat();
        cat.work();
        cat.sleep();//此處編譯會報(bào)錯。

        Animal dog=new Dog();
        dog.eat();//結(jié)果為:吃骨頭。此處調(diào)用子類的同名方法。
        
  //part3
        //如果想要調(diào)用父類中沒有的方法,則要向下轉(zhuǎn)型,這個非常像"強(qiáng)轉(zhuǎn)"
        Cat cat222 = (Cat)cat;        // 向下轉(zhuǎn)型(注意,如果是(Cat)dog 則會報(bào)錯)
        cat222.sleep();        //結(jié)果為:貓會睡懶覺。 可以調(diào)用 Cat 的 sleep()
    }



}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7328

    瀏覽量

    94409
  • 封裝
    +關(guān)注

    關(guān)注

    128

    文章

    9216

    瀏覽量

    148349
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4959

    瀏覽量

    73580
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式C語言面向對象編程---多態(tài)

    前兩篇文章主要講述了 C 語言面向對象編程– 封裝和繼承。本篇文章繼續(xù)來討論一下,如何使用 C 語言實(shí)現(xiàn)面向對象編程的另一個重要特性:多態(tài)。
    發(fā)表于 10-31 14:41 ?1531次閱讀

    Python的面向對象編程詳解

    一般編程可分為面向過程編程,和面向對象編程。Python的面向對象編程,與Java的面向
    發(fā)表于 09-04 16:35 ?1121次閱讀
    Python的面向<b class='flag-5'>對象</b><b class='flag-5'>編程</b>詳解

    每日一教labview視頻教程【12.15】labview面向對象編程(上)

    面向對象編程視頻:專家從類開始進(jìn)行講解,詳細(xì)說明了如何進(jìn)行面向對象編程。http://yunpan.cn/lk/480ep
    發(fā)表于 12-15 10:35

    【原創(chuàng)視頻】小草手把手LABVIEW之OOP面向對象編程基礎(chǔ)(1

    =a2hzp.8244740.0.0-------------------------------------視頻內(nèi)容:LabVIEW面向對象編程OOP介紹(分多個小節(jié),本視頻只是最初一個小節(jié),只是介紹)時長:14分鐘
    發(fā)表于 05-23 01:02

    LabVIEW面向對象的ActorFramework(1

    、維護(hù)、迭代。如果想要更好的學(xué)習(xí)這個概念,推薦兩本講解的面向對象編程很經(jīng)典的圖書:1.《面向對象的思考過程》2.《面向
    發(fā)表于 02-10 14:09

    面向對象編程及其特性 精選資料分享

    編程語言分為面向過程編程、函數(shù)式編程和面向對象編程。其實(shí)python就是一種面向對象
    發(fā)表于 07-21 08:38

    面向對象編程介紹

    目錄一、面向對象編程介紹1.面向過程編程2.函數(shù)式編程3.面向對象
    發(fā)表于 12-13 07:22

    C++面向對象多線程編程 (pdf電子版)

    C++面向對象多線程編程共分13章,全面講解構(gòu)建多線程架構(gòu)與增量多線程編程技術(shù)。第1章介紹了
    發(fā)表于 09-25 09:39 ?0次下載

    對象特性的測定

    對象特性的測定 一、 實(shí)驗(yàn)?zāi)康?b class='flag-5'>1、通過實(shí)驗(yàn)了解對象的靜態(tài)和動態(tài)特性;2、掌握對象靜態(tài)和動態(tài)
    發(fā)表于 05-17 10:53 ?14次下載

    面向對象編程練習(xí)

    實(shí)驗(yàn) 3 面向對象編程練習(xí) 一、實(shí)驗(yàn)?zāi)康?    通過編程和上機(jī)實(shí)驗(yàn)理解 Java 語言是如何體現(xiàn)面向對象編程
    發(fā)表于 09-23 18:57 ?3328次閱讀

    LabVIEW 網(wǎng)絡(luò)講壇第四季:面向對象編程的應(yīng)用

    本視頻主要講解了基本概念,以及面向對象編程在LabVIEW中的應(yīng)用。
    的頭像 發(fā)表于 06-25 02:46 ?3267次閱讀
    LabVIEW 網(wǎng)絡(luò)講壇第四季:面向<b class='flag-5'>對象</b>的<b class='flag-5'>編程</b>的應(yīng)用

    Labview面向對象編程快速入門教程

    在面向對象編程中, 類用來表示通用特性。 例如,假設(shè)有一個描述汽車的類。 類中定義了各種汽車的通用特性對象是類的特定實(shí)例。汽車類的一個
    發(fā)表于 07-31 08:00 ?88次下載
    Labview面向<b class='flag-5'>對象</b><b class='flag-5'>編程</b>快速入門教程

    Oracle外部例程-plsql調(diào)用com對象講解

    Oracle外部例程-plsql調(diào)用com對象講解(現(xiàn)代電源技術(shù)試卷西建大)-該文檔為Oracle外部例程-plsql調(diào)用com對象講解文檔,是一份不錯的參考文檔,感興趣的可以看看,,
    發(fā)表于 09-28 13:36 ?14次下載
    Oracle外部例程-plsql調(diào)用com<b class='flag-5'>對象</b><b class='flag-5'>講解</b>

    全面講解?對象編程?特性 2

    這塊就比較特殊了,我們一句句來看 `Animal cat=new Cat();` 像這種這個 `父類引用指向子類對象`,這種現(xiàn)象叫做:**"向上轉(zhuǎn)型"**,也被稱為**多態(tài)
    的頭像 發(fā)表于 02-09 14:25 ?678次閱讀
    <b class='flag-5'>全面</b><b class='flag-5'>講解</b>?<b class='flag-5'>向</b><b class='flag-5'>對象</b><b class='flag-5'>編程</b><b class='flag-5'>三</b>?<b class='flag-5'>特性</b> 2

    西門子PLC面向對象編程

    面向對象編程是計(jì)算機(jī)高級語言的一種高級編程模式,這種設(shè)計(jì)思想也可以應(yīng)用于工業(yè)控制系統(tǒng)的plc程序中。雖然我們 無法實(shí)現(xiàn)面向對象編程的許多優(yōu)
    發(fā)表于 04-17 11:41 ?7次下載
    西門子PLC面向<b class='flag-5'>對象</b><b class='flag-5'>編程</b>