最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java封裝、繼承、多態(tài)三大特征的理解

 更新時間:2016年06月17日 12:03:54   作者:hansheng  
封裝、繼承、多態(tài)三大特征是java中比較常用的,務必要掌握,下面給大家介紹Java封裝、繼承、多態(tài)三大特征的理解,有不清楚的朋友可以一起學習下

首先先簡單的說一下其3大特性的定義:

封裝:隱藏對象的屬性和實現(xiàn)細節(jié),僅對外公開接口,控制在程序中屬性的讀和修改的訪問級別。將抽象得到的數(shù)據(jù)和行為(或功能)相結合,形成一個有機的整體,也就是將數(shù)據(jù)與操作數(shù)據(jù)的源代碼進行有機的結合,形成“類”,其中數(shù)據(jù)和函數(shù)都是類的成員。封裝的目的是增強安全性和簡化編程,使用者不必了解具體的實現(xiàn)細節(jié),而只是要通過外部接口,一特定的訪問權限來使用類的成員。封裝的基本要求是: 把所有的屬性私有化,對每個屬性提供getter和setter方法,如果有一個帶參的構造函數(shù)的話,那一定要寫一個不帶參的構造函數(shù)。在開發(fā)的時候經(jīng)常要對已經(jīng)編寫的類進行測試,所以在有的時候還有重寫toString方法,但這不是必須的。

繼承:通過繼承實現(xiàn)代碼復用。Java中所有的類都是通過直接或間接地繼承java.lang.Object類得到的。繼承而得到的類稱為子類,被繼承的類稱為父類。子類不能繼承父類中訪問權限為private的成員變量和方法。子類可以重寫父類的方法,及命名與父類同名的成員變量。但Java不支持多重繼承,即一個類從多個超類派生的能力。在開發(fā)中盡量減少繼承關系,這樣做是為了把程序的耦合度降低。

多態(tài):多態(tài)又分為設計時多態(tài)和運行時多態(tài),例如重載又被稱為設計時多態(tài),而對于覆蓋或繼承的方法,JAVA運行時系統(tǒng)根據(jù)調(diào)用該方法的實例的類型來決定選擇調(diào)用哪個方法則被稱為運行時多態(tài)??偠灾?,面向對象的設計的典型特點就是繼承,封裝和多態(tài),這些特點也是面向對象之所以能如此盛行的關鍵所在。

封裝

java中類的屬性的訪問權限默認值不是private,要想隱藏該屬性的方法,就可以加private修飾符,來限制只能夠在類的內(nèi)部進行訪問。

對于類中的私有屬性,要對其給出一對方法(getXXX,setXXX())訪問私有屬性,保證對私有屬性的操作和安全性。

方法的封裝,該公開的公開,該隱藏的隱藏。

java的繼承

繼承,是對有著共同特性的多類事物,進行再抽象成一個類。

java中的繼承要使用extends關鍵字,并且java中指允許單繼承,也就是一個類只能有一個父類。

構造方法不能被繼承。

java方法中的覆蓋

子類中有和父類中可訪問的同名同返回同參數(shù)列表的方法時,就會覆蓋從父類繼承來的方法。

super()關鍵字

super(),表示在子類的構造方法調(diào)用父類的構造方法時,super()也只能在構造方法中的第一句。

java中的多態(tài)

有兩種多態(tài)的機制:編譯時多態(tài)、運行時多態(tài)

1、方法的重載:重載是指同一類中有多個同名的方法,但這些方法有著不同的參數(shù)。,因此在編譯時就可以確定到底調(diào)用哪個方法,它是一種編譯時多態(tài)。

2、方法的覆蓋:子類可以覆蓋父類的方法,因此同樣的方法會在父類中與子類中有著不同的表現(xiàn)形式。在java語言中,基類的引用變量不僅可以指向基類的實例對象,也可以指向子類的實例對象,同樣,接口中的引用變量也可以指向其實現(xiàn)類的實例對象。

public class A {
public String show(D obj) {
return ("A and D");
}
public String show(A obj) {
return ("A and A");
} 
}
public class B extends A{
public String show(B obj){
return ("B and B");
}
public String show(A obj){
return ("B and A");
} 
}
public class C extends B{
}
public class D extends B{
}
public class Test {
public static void main(String[] args) {
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D(); 
System.out.println("1--" + a1.show(b));
System.out.println("2--" + a1.show(c));
System.out.println("3--" + a1.show(d));
System.out.println("4--" + a2.show(b));
System.out.println("5--" + a2.show(c));
System.out.println("6--" + a2.show(d));
System.out.println("7--" + b.show(b));
System.out.println("8--" + b.show(c));
System.out.println("9--" + b.show(d)); 
}
}
1--A and A
2--A and A
3--A and D
4--B and A
5--B and A
6--A and D
7--B and B
8--B and B
9--A and D

當超類對象引用變量引用子類對象時,被引用對象的類型而不是引用變量的類型決定了調(diào)用誰的成員方法,但是這個被調(diào)用的方法必須是在超類中定義過的,也就是說被子類覆蓋的方法。

這我們用一個例子來說明這句話所代表的含義:a2.show(b);

這里a2是引用變量,為A類型,它引用的是B對象,因此按照上面那句話的意思是說有B來決定調(diào)用誰的方法,所以a2.show(b)應該要調(diào)用B中的show(B obj),產(chǎn)生的結果應該是“B and B”,但是為什么會與前面的運行結果產(chǎn)生差異呢?這里我們忽略了后面那句話“但是這兒被調(diào)用的方法必須是在超類中定義過的”,那么show(B obj)在A類中存在嗎?根本就不存在!所以這句話在這里不適用?那么難道是這句話錯誤了?非也!其實這句話還隱含這這句話:它仍然要按照繼承鏈中調(diào)用方法的優(yōu)先級來確認。所以它才會在A類中找到show(A obj),同時由于B重寫了該方法所以才會調(diào)用B類中的方法,否則就會調(diào)用A類中的方法。

以上所述是小編給大家介紹的Java封裝、繼承、多態(tài)三大特征的理解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • 一文詳解Java中流程控制語句

    一文詳解Java中流程控制語句

    在一個程序執(zhí)行的過程中,各條語句的執(zhí)行順序對程序的結果是有直接影響的。也就是說,程序的流程對運行結果有直接的影響。所以,我們必須清楚每條語句的執(zhí)行流程。本文就來通過一些示例帶大家詳細了解一下
    2022-10-10
  • SpringMVC源碼解析之消息轉換器HttpMessageConverter

    SpringMVC源碼解析之消息轉換器HttpMessageConverter

    本篇文章主要介紹了SpringMVC源碼解析之消息轉換器HttpMessageConverter ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Java使用PDFBox實現(xiàn)操作PDF文檔

    Java使用PDFBox實現(xiàn)操作PDF文檔

    這篇文章主要為大家詳細介紹了Java如何使用PDFBox實現(xiàn)操作PDF文檔,例如添加本地圖片、添加網(wǎng)絡圖片、圖片寬高自適應、圖片水平垂直居中對齊等功能,需要的可以了解下
    2024-03-03
  • Spring自定義參數(shù)解析器代碼實例

    Spring自定義參數(shù)解析器代碼實例

    這篇文章主要介紹了Spring自定義參數(shù)解析器代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 使用mybatis進行數(shù)據(jù)插入時返回自增id的方法及注意點

    使用mybatis進行數(shù)據(jù)插入時返回自增id的方法及注意點

    這篇文章主要給大家介紹了關于使用mybatis進行數(shù)據(jù)插入時返回自增id的方法及注意點,在插入一條數(shù)據(jù)之后需要返回它的自增主鍵id,因為插入的實體類數(shù)據(jù)id為空,后面的邏輯還需要這個id,需要的朋友可以參考下
    2023-09-09
  • spring cloud feign不支持@RequestBody+ RequestMethod.GET報錯的解決方法

    spring cloud feign不支持@RequestBody+ RequestMethod.GET報錯的解決方法

    這篇文章主要介紹了spring cloud feign不支持@RequestBody+ RequestMethod.GET報錯的解決方法,需要的朋友可以參考下
    2018-01-01
  • java中switch case語句需要加入break的原因解析

    java中switch case語句需要加入break的原因解析

    這篇文章主要介紹了java中switch case語句需要加入break的原因解析的相關資料,需要的朋友可以參考下
    2017-07-07
  • Springboot AOP開發(fā)教程

    Springboot AOP開發(fā)教程

    AOP是OOP的延續(xù),是軟件開發(fā)中的一個熱點,也是Spring框架中的一個重要內(nèi)容,是函數(shù)式編程的一種衍生范型,本文給大家介紹Springboot AOP開發(fā)教程,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 基于JVM 調(diào)優(yōu)的技巧總結分析

    基于JVM 調(diào)優(yōu)的技巧總結分析

    本篇文章是對JVM 調(diào)優(yōu)的技巧進行了總結和分析。需要的朋友參考下
    2013-05-05
  • SpringMVC整合SSM實現(xiàn)異常處理器詳解

    SpringMVC整合SSM實現(xiàn)異常處理器詳解

    SpringMVC是一種基于Java,實現(xiàn)了Web MVC設計模式,請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將Web層進行職責解耦?;谡埱篁寗又傅木褪鞘褂谜埱?響應模型,框架的目的就是幫助我們簡化開發(fā),SpringMVC也是要簡化我們?nèi)粘eb開發(fā)
    2022-10-10

最新評論

永兴县| 石狮市| 满城县| 缙云县| 满洲里市| 祁连县| 阿坝| 镶黄旗| 平谷区| 绥化市| 陆良县| 吕梁市| 阿拉善左旗| 尚志市| 靖州| 沙湾县| 合山市| 沙雅县| 东乌| 郁南县| 奉节县| 鱼台县| 襄汾县| 兰考县| 东兰县| 迁西县| 正镶白旗| 旌德县| 扶沟县| 建湖县| 旌德县| 博爱县| 砀山县| 柘荣县| 寿光市| 福建省| 邻水| 茶陵县| 五华县| 漠河县| 台东市|