java基础----(三大特性:封装,继承,多态)
封裝
將對象的轉態信息隱藏在對象內部,不允許外部程序直接訪問,而是通過該類提供的方法來實現對內部信息的訪問和操作。
封裝的好處:
- 隱藏類的實現細節
- 使用者只能通過事先預定的方法來訪問數據,從而可以在該方法里加入控制邏輯,限制對成員變量的不合理訪問。
- 可進行數據檢查從而有利于保證對象信息的完整性
- 便于修改,提高代碼的科維護性
具體實現方式:
使用 private 修飾符把成員變量設置為私有,防止外部程序直接隨意調用或修改成員變量,然后對外提供 public 的 set 和 get 方法來設置和獲取成員變量的值。
Java 中主要有 private、protected、public 和 默認訪問權限四種:
- private(當前類訪問權限):如果類里面的一個成員(包括成員變量,方法和構造器等)使用private訪問控制符來修飾,則這個成員只能在當前類的內部被訪問。用于修飾成員變量最合適就可以將其隱藏在該類內部。
- default(包訪問權限):如果類里面的一個成員(包括成員變量,方法和構造器等)或者一個外部類不使用任訪問控制修飾符,就成他為包訪問權限的,default訪問控制的成或外部類可以被相同包下的其他類訪問
- protected(子類訪問權限):如果類里面的一個成員(包括成員變量,方法和構造器等)使用protected訪問控制符來修飾,那這個成員既可以被同一包中的其他類 訪問,也可以被不同包中的子類訪問。通常是希望其子類來重寫這個方法
- public(公共訪問權限):這個類里面的一個成員(包括成員變量,方法和構造器等)或者一個外部類使用public訪問控制符來修飾,那么這個成員或外部類就可以被所有的類訪問,不管訪問和被訪問類是否處于同一個包中,是否具有父子繼承關系。
訪問控制級別如下表:
例子:
繼承
繼承概念
繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。java繼承通過extends關鍵字來實現,實現繼承的類被稱為子類(基類),被繼承的類被稱為父類(超類)。
生活中的繼承:
兔子和羊屬于食草動物類,獅子和豹屬于食肉動物類。
食草動物和食肉動物又是屬于動物類。
所以繼承需要符合的關系是:is-a,父類更通用,子類更具體。
雖然食草動物和食肉動物都是屬于動物,但是兩者的屬性和行為上有差別,所以子類會具有父類的一般特性也會具有自身的特性。
類的繼承格式
class 父類{ }class 子類 extends 父類{ }為什么要繼承
接下來我們通過實例來說明這個需求。
開發動物類,其中動物分別為老虎以及豹子,要求如下:
- 老虎:屬性(姓名,id),方法(吃,睡,自我介紹)
- 豹子:屬性(姓名,id),方法(吃,睡,自我介紹)
老虎:
public class Tiger{ private String name; private int id; public Tiger(String myName, int myid) { name = myName; id = myid; } public void eat(){ System.out.println(name+"正在吃"); }public void sleep(){System.out.println(name+"正在睡");}public void introduction() { System.out.println("大家好!我是" + id + "號" + name + "."); } }豹子:
public class Leopard{ private String name; private int id; public Leopard(String myName, int myid) { name = myName; id = myid; } public void eat(){ System.out.println(name+"正在吃"); }public void sleep(){System.out.println(name+"正在睡");}public void introduction() { System.out.println("大家好!我是" + id + "號" + name + "."); } }從這兩段代碼可以看出來,代碼存在重復了,導致后果就是代碼量大且臃腫,而且維護性不高(維護性主要是后期需要修改的時候,就需要修改很多的代碼,容易出錯),所以要從根本上解決這兩段代碼的問題,就需要繼承,將兩段代碼中相同的部分提取出來組成 一個父類:
食肉動物類:
public class Carnivore{ private String name; private int id; public Carnivore(String myName, int myid) { name = myName; id = myid;} public void eat(){ System.out.println(name+"正在吃"); }public void sleep(){System.out.println(name+"正在睡");}public void introduction() { System.out.println("大家好!我是"+ id + "號" + name + "."); } }這個Carnivore類就可以作為一個父類,然后老虎類和豹子類繼承這個類之后,就具有父類當中的屬性和方法,子類就不會存在重復的代碼,維護性也提高,代碼也更加簡潔,提高代碼的復用性(復用性主要是可以多次使用,不用再多次寫同樣的代碼) 繼承之后的代碼:
繼承后的老虎:
public class Tiger extends Carnivore{ public Tiger(String myName, int myid) { super(myName, myid); }繼承后的豹子:
public class Leopard extends Carnivore{ public Tiger(String myName, int myid) { super(myName, myid); }super和this有什么區別?
super是一個關鍵字,代表父類的存儲空間標識。(可以理解為父親的引用)
super和this的用法相似。
this代表對象的引用(誰調用就代表誰);
super代表當前子類對父類的引用。
繼承的優點和缺點
優點:
- 提高了代碼的復用性
- 提高了代碼的維護性
- 建立了類與類之間的關系,繼承是多態的前提。
缺點:
- 在一定程度上,造成類與類之間的強關聯,即所謂的高耦合。
- 父類功能的改變對子類也會造成影響。
注意事項:
Java 不支持多繼承,下面是錯誤的:
如果想實現A和B里面的方法可以用implements實現:
多態
多態是同一個行為具有多個不同表現形式或形態的能力。
多態就是同一個接口,使用不同的實例而執行不同操作,如圖所示:
多態是對象的多種變現形式的體現:
多態的優點
- 消除類型之間的耦合關系
- 可替換性
- 可擴充性
- 接口性
- 靈活性
- 簡化性
多態存在的三個必要條件
- 繼承
- 重寫
- 父類引用指向子類對象
比如:
Parent p = new Child();當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,再去調用子類的同名方法。
例子:
public class Test {public static void main(String[] args) {show(new Cat()); // 以 Cat 對象調用 show 方法show(new Dog()); // 以 Dog 對象調用 show 方法Animal a = new Cat(); // 向上轉型 a.eat(); // 調用的是 Cat 的 eatCat c = (Cat)a; // 向下轉型 c.work(); // 調用的是 Cat 的 work} public static void show(Animal a) {a.eat(); // 類型判斷if (a instanceof Cat) { // 貓做的事情 Cat c = (Cat)a; c.work(); } else if (a instanceof Dog) { // 狗做的事情 Dog c = (Dog)a; c.work(); } } }abstract class Animal { abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("吃魚"); } public void work() { System.out.println("抓老鼠"); } } class Dog extends Animal { public void eat() { System.out.println("吃骨頭"); } public void work() { System.out.println("看家"); } }執行以上程序,輸出結果為:
吃魚 抓老鼠 吃骨頭 看家 吃魚 抓老鼠多態的實現方式
-
重寫:詳細可訪問:Java 重寫(Override)與重載(Overload)
-
抽象類和抽象方法:詳細可訪問:抽象類和抽象方法
-
接口:生活中的接口最具代表性的就是插座,例如一個三接頭的插頭都能接在三孔插座中,因為這個是每個國家都有各自規定的接口規則,有可能到國外就不行,那是因為國外自己定義的接口類型
java中的接口類似于生活中的接口,就是一些方法特征的集合,但沒有方法的實現。詳細可訪問:接口
總結
以上是生活随笔為你收集整理的java基础----(三大特性:封装,继承,多态)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity 实现圆圈调节
- 下一篇: 武汉新华电脑学校计算机协会,第十一届大学