Java封裝繼承多態(tài)

一.成員變量與局部變量的區(qū)別

成員變量:在類中定義,用來描述對象將要有什么(屬性)盔性∠忌ィ可被本類方法和其他跟當前類有關(guān)系的方法使用。
局部變量:在類的方法中定義冕香,在方法中臨時保存數(shù)據(jù)蛹尝。(只能在當前的方法中使用)

區(qū)別:

  1. 作用域不同:局部變量的作用域僅限于定義它的方法,成員變量的作用域在整個類內(nèi)部都是可見的悉尾。
  2. 初始值不同:java會給成員變量一個初始值突那,java不會給局部變臉賦予初始值。
  3. 在同一個方法中构眯,不允許有同名局部變量愕难;在不同的方法中,可以有同名局部變量惫霸。
  4. 兩類變量同名時务漩,局部變量具有更高的優(yōu)先級。

二.構(gòu)造方法

構(gòu)造方法是定義在Java類中的一個用來初始化對象的方法,構(gòu)造方法與類同名且沒有返回值它褪。
構(gòu)造方法的語法格式:
public 構(gòu)造方法名(){
//初始化代碼
}
public后面沒有返回值類型,構(gòu)造方法名與類名相同,括號內(nèi)可以指定參數(shù)饵骨。
如果我們沒有指定一個無參的構(gòu)造方法,那系統(tǒng)會幫我們自動生成一個無參的構(gòu)造方法,如果我們對系統(tǒng)生成的無參構(gòu)造方法不滿意,可以自定義一個無參的構(gòu)造方法。
也就是說當我們創(chuàng)建對象的時候,其實我們執(zhí)行的是構(gòu)造方法茫打。


三.Java 中的 static 使用之靜態(tài)變量

Java 中被 static 修飾的成員稱為靜態(tài)成員或類成員居触。它屬于整個類所有,而不是某個對象所有老赤,即被類的所有對象所共享轮洋。靜態(tài)成員可以使用類名直接訪問,也可以使用對象名進行訪問抬旺。當然弊予,鑒于他作用的特殊性更推薦用類名訪問。

使用 static 可以修飾變量开财、方法和代碼塊汉柒。

靜態(tài)方法中可以直接調(diào)用同類中的靜態(tài)成員,但不能直接調(diào)用非靜態(tài)成員.如果希望在靜態(tài)方法中調(diào)用非靜態(tài)變量责鳍,可以通過創(chuàng)建類的對象碾褂,然后通過對象來訪問非靜態(tài)變量。

在普通成員方法中历葛,則可以直接訪問同類的非靜態(tài)變量和靜態(tài)變量正塌。

靜態(tài)方法中可以直接調(diào)用靜態(tài)方法,但不能直接調(diào)用非靜態(tài)方法,需要通過對象來訪問非靜態(tài)方法乓诽。

注意main函數(shù)是一個靜態(tài)函數(shù)帜羊。


四.封裝

將類的某些信息隱藏在類內(nèi)部,不允許外部程序直接訪問鸠天,而是通過該類提供的方法來實現(xiàn)對隱藏信息的操作和訪問逮壁。

java中包的作用:
1.管理java文件。
2.管理同名文件沖突粮宛,加上不同的包來區(qū)分相同文件名的類窥淆。

包的定義:
packege,包名間可以用點來區(qū)別文件夾且要放在java程序的第一行。

類名相同的可以用包名來區(qū)分:
java.lang.(類) 放置java語言基礎類巍杈。
java.util.(類)放置java語言工具類忧饭。
java.io.(類)包含輸入輸出相關(guān)功能的類。

用import來顯示在某個文件中的其他文件中的類:
在包中不能存放相同名字的類筷畦。
默認情況下會把同一個包名導入進來词裤。
包名全部是小寫。

訪問修飾符
private 同類
默認 同類 同包
protected 同類 同包 子類
public 同類 同包 子類 其他

this關(guān)鍵字

  1. this關(guān)鍵字代表當前對象
    this.屬性 操作當前對象的屬性
    this.方法 調(diào)用當前對象的方法
  2. 封裝對象的屬性的時候鳖宾,經(jīng)常會使用this關(guān)鍵字
    public void setJia(double jia){
    this.jia=jia;//this.屬性=參數(shù)吼砂;就是將參數(shù)的值付給當前對象的屬性(為了區(qū)分屬性和參數(shù))
    this.sendMessage();//this.方法;就是調(diào)用當前對象的sendMessage()方法鼎文。
    }

Java中的內(nèi)部類:
內(nèi)部類( Inner Class )就是定義在另外一個類里面的類渔肩。與之對應,包含內(nèi)部類的類被稱為外部類拇惋。
內(nèi)部類的主要作用如下:

  1. 內(nèi)部類提供了更好的封裝周偎,可以把內(nèi)部類隱藏在外部類之內(nèi),不允許同一個包中的其他類訪問該類撑帖。
  2. 內(nèi)部類的方法可以直接訪問外部類的所有數(shù)據(jù)蓉坎,包括私有的數(shù)據(jù)。
  3. 內(nèi)部類所實現(xiàn)的功能使用外部類同樣可以實現(xiàn)胡嘿,只是有時使用內(nèi)部類更方便蛉艾。

內(nèi)部類可分為以下幾種:
成員內(nèi)部類、靜態(tài)內(nèi)部類衷敌、方法內(nèi)部類勿侯、匿名內(nèi)部類。


五.繼承

繼承是類與類的一種關(guān)系逢享;Java中的繼承是單繼承罐监,只有一個父類。子類直接擁有父親的所有屬性和方法瞒爬。private實現(xiàn)的無效!代碼可復用。
繼承語法:

class 子類 extends 父類{ }

方法的重寫:
如果子類對繼承父類的方法不滿意侧但,是可以重寫父類繼承的方法的矢空,當調(diào)用方法時會優(yōu)先調(diào)用子類的方法。
語法:

  1. 返回值類型
  2. 方法名
  3. 參數(shù)類型及個數(shù)

都要與父類繼承的方法相同禀横,才叫方法的重寫屁药。

繼承的初始化順序:
1.初始化父類再初始化子類。
2.先執(zhí)行初始化對象中的屬性柏锄,再執(zhí)行構(gòu)造方法中的初始化酿箭。
父類對象-->屬性初始化--->構(gòu)造方法
子類對象-->屬性初始化--->構(gòu)造方法

final關(guān)鍵字:
表示“最終的”,即不可修改趾娃。
final可以修飾類缭嫡、方法、屬性和變量

  1. 修飾類:不允許被繼承
  2. 修飾方法:不允許被重寫
  3. 修飾屬性:則該屬性不會進行隱式初始化(不會自動初始化)抬闷,需要手動初始化或者在構(gòu)造方法中初始化 (但二者只能選一妇蛀,即只能初始化一次后便不能更改)
  4. 修飾變量,只能在聲明的時候賦一次值笤成,成為常量评架。 (static final 會使其成為全局常量)

super關(guān)鍵字
在對象內(nèi)部使用,代表父類對象炕泳。
子類構(gòu)造過程中必須調(diào)用父類的構(gòu)造方法:隱示super();
顯示調(diào)用父類構(gòu)造方法纵诞,必須放在構(gòu)造方法的第一行。
當子類構(gòu)造方法中既沒有顯示調(diào)用父類的構(gòu)造方法培遵,父類又沒有無參的構(gòu)造方法則編譯出錯挣磨。

Object類
是所有類的父類,如果一個類沒有使用extends關(guān)鍵字明確標識繼承另外一個類,那么這個類默認繼承Object類,且Object類中的方法適合所有子類。
toString()方法:
我們經(jīng)常在輸出對象的時候希望得到子類的屬性值,那么我們就要重寫從父類繼承來的toString()方法,eclipse中右鍵菜單欄-源碼source-生成generate toString(),他就會根據(jù)我們對象的屬性幫我們生成一個toString()方法來輸出屬性值荤懂。
equals()方法:
返回值是布爾類型茁裙,比較的是對象的引用是否指向同一塊內(nèi)存地址,對象實例化時节仿,即給對象分配內(nèi)存空間晤锥。
getClass()方法:
可以得到類對象,判斷類型是否一樣-----if (getClass() != obj.getClass())
new出來的是類的對象廊宪,關(guān)注的是類的屬性的具體的數(shù)據(jù)矾瘾;
類對象是類的代碼信息,關(guān)注的是類有什么屬性和方法箭启。


六.多態(tài)

對象的多種形態(tài)壕翩。
主要分為 引用多態(tài) 、方法多態(tài)傅寡。
繼承是多態(tài)的實現(xiàn)基礎放妈,別忘了子父類要有繼承關(guān)系北救。

多態(tài)特性:

  1. 引用多態(tài)
    1.父類引用可以指向本類對象 Animal obj1 = new Animal();
    2.父類引用可以指向子類對象 Animal obj2 = new Dog();
    但是我們不能用子類的引用指向父類對象 Dog obj3 = new Animal();//錯

  2. 方法多態(tài)
    1.在父類Animal中定義一個eat()方法,輸出一個語句(動物有吃的能力); 在子類Dog中重寫eat()方法芜抒,輸出一個語句(狗是吃肉的); 那么我們在測試類main函數(shù)里面珍策,如果obj1.eat() ,那么調(diào)用的是父類的方法. 若用obj2調(diào)用eat()方法宅倒,那么調(diào)用的是子類的方法.
    2.還有一種情況攘宙,比如創(chuàng)建一個繼承父類Animal的子類Cat 讲仰,但是Cat里并不重寫繼承的eat()方法. 然后武福,我們在測試類main函數(shù)里創(chuàng)建一個子類對象, Animal obj3 = new Cat(); 然后調(diào)用 obj3.eat(); 那么德召,結(jié)果調(diào)用的則是子類繼承父類的方法. (輸出結(jié)果:動物有吃的能力)
    3.最后一種特殊情況贾费,多態(tài)的特性是不能使用的. 若在子類添加一個獨有的方法 public void watchDoor() 详拙,含有一句輸出語句(狗具有看門的能力); 那么我們在測試類的main函數(shù)當中(得先定義好對象Animal obj2 = new Dog() )岁疼,就不能用obj2.watchDoor()拧粪,即不能通過父類的引用調(diào)用子類的方法.

引用類型轉(zhuǎn)換:

  1. 向上類型轉(zhuǎn)換(隱式/自動類型轉(zhuǎn)換)铐懊,是小類型到大類型的轉(zhuǎn)換灶搜。
    如:
    Dog dog=new Dog();
    Animal animal=dog;//正確祟蚀,自動類型提升,向上類型轉(zhuǎn)換
  2. 向下類型轉(zhuǎn)換(強制類型轉(zhuǎn)換)割卖,是大類型到小類型的轉(zhuǎn)換(存在風險前酿,溢出)
    如:
    Dog dog1=(Dog)animal;//向下類型轉(zhuǎn)換
  3. instanceof運算符,來解決引用對象的類型鹏溯,避免類型轉(zhuǎn)換的安全性問題罢维。如:
    Dog dog=new Dog();
    Animal animal=dog;
    Cat cat=(Cat)animal;//編譯時不會出錯(按Cat類型進行編譯),但運行時會報錯
    因為它開辟的是Dog類型的空間丙挽,而(無法將引用類型進行轉(zhuǎn)換)無法將dog對象轉(zhuǎn)換成Cat類型肺孵,并且此方法對程序的安全性有影響。此時應該利用instanceof和if語句結(jié)合使用颜阐,進行驗證平窘,以保證程序的安全性,如:
    if(animal instanceof Cat){//判斷animal類中是否包含Cat類型的元素凳怨,若包含則進行轉(zhuǎn)換瑰艘,instanceof返回值為布爾類型
    Cat cat=(Cat)animal;
    }else{
    System.out.println("無法進行類型轉(zhuǎn)換");
    }

抽象類

  1. 語法定義:
    抽象類錢使用abstract關(guān)鍵字修飾,則該類為抽象類肤舞。
  2. 應用場景:
    a紫新、在某些情況下,某個父類只是知道其子類應該包含怎樣的方法李剖,但無法準確知道這些子類如何實現(xiàn)這些方法
    b芒率、從多個具有相同特征的類中抽象出一個抽象類,以這個抽象類作為子類的模板篙顺,從而避免了子類設計的隨意性偶芍。
  3. 作用:
    限制規(guī)定子類必須實現(xiàn)某些方法充择,但不關(guān)注實現(xiàn)細節(jié)。
  4. 使用規(guī)則:
    a. abstract定義抽象類
    b. abstract定義抽象方法腋寨,只有聲明聪铺,不需要實現(xiàn)
    c. 包含抽象方法的類是抽象類
    d. 抽象類中可以包含普通的方法化焕,也可以沒

現(xiàn)有Shape圖形類萄窜,用Rectangle矩形和Circle圖形子類,求圖形的周長和面積撒桨。
代碼實現(xiàn):

abstract class Shape{

protected float width;
protected float lenth;

public Shape(float a, float b){
    width = a;
    lenth = b;    
}

public abstract float getArea();        //獲得面積
public abstract float getGirth();    //獲得周長

} 
class Rectangle extends Shape{
public    Rectangle(float a, float b){
    super(a, b);
}
public float getGirth(){
    return 2*(width + lenth);
}
public float getArea(){
    return width*lenth;
}
}
class Circle extends Shape{
public Circle(float a){
    super(a, a);
}
public float getGirth(){
    return (float)3.14*2*width;
}
public float getArea(){
    return (float)3.14*width*width;
}
}
public class HelloWorld{
public static void main (String[] args){
    Rectangle rect = new Rectangle(2, 3);
    Circle circle = new Circle(3);
    System.out.println("rect girth: " + rect.getGirth() + "  rect area: " + rect.getArea());
    System.out.println("circle girth: " + circle.getGirth() + "  circle area: " + circle.getArea());
} 
}

七.接口

接口可以理解為一種特殊的類查刻,由全局常量和公共的抽象方法所組成,接口定義使用 interface 關(guān)鍵字凤类。
類是一種具體實現(xiàn)體穗泵,而接口定義了某一批類所需要遵守的規(guī)范,接口不關(guān)心這些類里方法的實現(xiàn)細節(jié)
谜疤,它只規(guī)定這些類里必須提供某些方法佃延。

使用接口:
一個類可以實現(xiàn)一個或多和接口,實現(xiàn)接口使用implements關(guān)鍵字夷磕。java中一個類只能繼承一個父類履肃,可以通過實現(xiàn)多個接口作補充。
繼承父類實現(xiàn)接口的語法:
[修飾符] class 類名 extends 父類 implements 接口1坐桩,接口2……{
類體部分
}//如果繼承的是抽象類尺棋,需要實現(xiàn)繼承的抽象方法;要實現(xiàn)接口中的抽象方法
如果要繼承父類绵跷,繼承父類必須在實現(xiàn)接口之前膘螟,接口命名時首字母為I,以區(qū)分類名碾局【2校可通過add繼承父接口。

接口的使用還經(jīng)常與匿名內(nèi)部類配合净当。(匿名內(nèi)部類就是沒有名字的內(nèi)部類内斯,多用于關(guān)注實現(xiàn)而不關(guān)注實現(xiàn)類的名稱)
語法格式:
Interface i=new Interface(){
public void method(){
System.out.print("匿名內(nèi)部類實現(xiàn)接口的方式……");
}
} //即通過創(chuàng)建接口的對象,直接寫出實現(xiàn)的方法蚯瞧,再調(diào)用此方法
還可以直接創(chuàng)建并調(diào)用方法嘿期,如:
new IPlay(){
public void playGame(){
System.out.println("……");
}
}.playGame();


八.UML

  1. Unified Modeling Language,統(tǒng)一建模語言/標準建模語言埋合,是支持模型化和軟件系統(tǒng)開發(fā)的圖形化語言备徐;是一個支持模型化和軟件系統(tǒng)開發(fā)的圖形化語言;為軟件開發(fā)的所有階段提供模型化的可視化支持
  2. 用例圖:可視化表達系統(tǒng)如何滿足業(yè)務規(guī)則和特定的用戶需求甚颂;
  3. 序列圖:表述計算機角色和相互關(guān)系蜜猾,按照交互發(fā)生的順序顯示對象之間的交互秀菱;
  4. 類圖/類別圖:描述類之間的關(guān)系,類中的屬性和方法蹭睡;
  5. UML類圖衍菱、業(yè)務邏輯和所有支持結(jié)構(gòu)一同被用于定義全部的代碼結(jié)構(gòu)。
  6. UML建模工具:如Visio肩豁、Rational Rose脊串、PowerDesiner
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市清钥,隨后出現(xiàn)的幾起案子琼锋,更是在濱河造成了極大的恐慌,老刑警劉巖祟昭,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缕坎,死亡現(xiàn)場離奇詭異,居然都是意外死亡篡悟,警方通過查閱死者的電腦和手機谜叹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搬葬,“玉大人荷腊,你說我怎么就攤上這事〔任” “怎么了停局?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長香府。 經(jīng)常有香客問我董栽,道長,這世上最難降的妖魔是什么企孩? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任锭碳,我火速辦了婚禮,結(jié)果婚禮上勿璃,老公的妹妹穿的比我還像新娘擒抛。我一直安慰自己,他們只是感情好补疑,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布歧沪。 她就那樣靜靜地躺著,像睡著了一般莲组。 火紅的嫁衣襯著肌膚如雪诊胞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天锹杈,我揣著相機與錄音撵孤,去河邊找鬼迈着。 笑死,一個胖子當著我的面吹牛邪码,可吹牛的內(nèi)容都是我干的裕菠。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼闭专,長吁一口氣:“原來是場噩夢啊……” “哼奴潘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起喻圃,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤萤彩,失蹤者是張志新(化名)和其女友劉穎粪滤,沒想到半個月后斧拍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡杖小,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年肆汹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片予权。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡昂勉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扫腺,到底是詐尸還是另有隱情岗照,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布笆环,位于F島的核電站攒至,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏躁劣。R本人自食惡果不足惜迫吐,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望账忘。 院中可真熱鬧志膀,春花似錦、人聲如沸鳖擒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒋荚。三九已至戳稽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間圆裕,已是汗流浹背广鳍。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工荆几, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赊时。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓吨铸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親祖秒。 傳聞我的和親對象是個殘疾皇子诞吱,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

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

  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,235評論 0 2
  • 面向?qū)ο笾饕槍γ嫦蜻^程竭缝。 面向過程的基本單元是函數(shù)房维。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,059評論 0 4
  • 姓名: 李小娜 [嵌牛導讀]:封裝湿故、繼承阿趁、多態(tài)三大特征是java中比較常用的,務必要掌握坛猪,下面給大家介紹Java封...
    n184閱讀 1,318評論 0 1
  • 封裝 定義:把對象的屬性和(服務)結(jié)合為一個整體,盡可能的隱藏對象內(nèi)部的實現(xiàn)細節(jié)就斤。 優(yōu)點: 對象的數(shù)據(jù)封裝特性徹底...
    一根煙的彈跳閱讀 2,832評論 0 3
  • *“楚之南有冥靈者战转,以五百歲為春搜立,五百歲為秋;上古有大椿者槐秧,以八千歲為春啄踊,八千歲為秋。此大年也刁标〉咄ǎ” 你相信奇跡嗎?...
    晌風閱讀 5,346評論 0 5