日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java基础----(三大特性:封装,继承,多态)

發布時間:2023/12/14 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java基础----(三大特性:封装,继承,多态) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

封裝

將對象的轉態信息隱藏在對象內部,不允許外部程序直接訪問,而是通過該類提供的方法來實現對內部信息的訪問和操作。

封裝的好處:

  • 隱藏類的實現細節
  • 使用者只能通過事先預定的方法來訪問數據,從而可以在該方法里加入控制邏輯,限制對成員變量的不合理訪問。
  • 可進行數據檢查從而有利于保證對象信息的完整性
  • 便于修改,提高代碼的科維護性

具體實現方式:

使用 private 修飾符把成員變量設置為私有,防止外部程序直接隨意調用或修改成員變量,然后對外提供 public 的 set 和 get 方法來設置和獲取成員變量的值。

Java 中主要有 private、protected、public 和 默認訪問權限四種:

  • private(當前類訪問權限):如果類里面的一個成員(包括成員變量,方法和構造器等)使用private訪問控制符來修飾,則這個成員只能在當前類的內部被訪問。用于修飾成員變量最合適就可以將其隱藏在該類內部。
  • default(包訪問權限):如果類里面的一個成員(包括成員變量,方法和構造器等)或者一個外部類不使用任訪問控制修飾符,就成他為包訪問權限的,default訪問控制的成或外部類可以被相同包下的其他類訪問
  • protected(子類訪問權限):如果類里面的一個成員(包括成員變量,方法和構造器等)使用protected訪問控制符來修飾,那這個成員既可以被同一包中的其他類 訪問,也可以被不同包中的子類訪問。通常是希望其子類來重寫這個方法
  • public(公共訪問權限):這個類里面的一個成員(包括成員變量,方法和構造器等)或者一個外部類使用public訪問控制符來修飾,那么這個成員或外部類就可以被所有的類訪問,不管訪問和被訪問類是否處于同一個包中,是否具有父子繼承關系。

訪問控制級別如下表:


例子:

public class Person {//使用private修飾成員變量,將這些變量隱藏起來private String name;private int age;//提供方法來操作name成員變量public void setName(String name) {//執行合理性校驗,要求名字必須在2~6之間if (name.length()>6 || name.length()<2){System.out.println("設置的名字不符合要求");return;}else{this.name=name;}}public String getName() {return name;}//提供方法來操作gae成員變量public void setAge(int age) {//執行合理性校驗,要求年齡必須在0~100之間if (age>100 || age<0){System.out.println("設置的年齡不符合要求");return;}else{this.age=age;}}public int getAge() {return age;} }

繼承

繼承概念

繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。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實現:

多態

多態是同一個行為具有多個不同表現形式或形態的能力。
多態就是同一個接口,使用不同的實例而執行不同操作,如圖所示:

多態是對象的多種變現形式的體現:

現實生活中,比如“叫”這個動作: 貓的“叫”:“喵喵喵~” 狗的“叫”:“汪汪汪~” giao哥的“叫”:“一給我的giaogiao~” 同一個事件發生在不同的對象上會產生不同的結果

多態的優點

  • 消除類型之間的耦合關系
  • 可替換性
  • 可擴充性
  • 接口性
  • 靈活性
  • 簡化性

多態存在的三個必要條件

  • 繼承
  • 重寫
  • 父類引用指向子類對象

比如:

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基础----(三大特性:封装,继承,多态)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。