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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java面向对象(二、继承)

發布時間:2025/3/14 java 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java面向对象(二、继承) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java 繼承

繼承的概念

繼承是java面向對象編程技術的一塊基石,因為它允許創建分等級層次的類。 繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。 生活中的繼承: 兔子和羊屬于食草動物類,獅子和豹屬于食肉動物類。 食草動物和食肉動物又是屬于動物類。 所以繼承需要符合的關系是:is-a,父類更通用,子類更具體。 雖然食草動物和食肉動物都是屬于動物,但是兩者的屬性和行為上有差別,所以子類會具有父類的一般特性也會具有自身的特性。

類的繼承格式

在 Java 中通過 extends 關鍵字可以申明一個類是從另外一個類繼承而來的,一般形式如下: class 父類 { }class 子類 extends 父類 { }

為什么需要繼承

接下來我們通過實例來說明這個需求。 開發動物類,其中動物分別為企鵝以及老鼠,要求如下:
  • 企鵝:屬性(姓名,id),方法(吃,睡,自我介紹)
  • 老鼠:屬性(姓名,id),方法(吃,睡,自我介紹)
企鵝類: public class Penguin { private String name; private int id; public Penguin(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 Mouse { private String name; private int id; public Mouse(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 Animal { private String name; private int id; public Animal(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 + "."); } } 這個Animal類就可以作為一個父類,然后企鵝類和老鼠類繼承這個類之后,就具有父類當中的屬性和方法,子類就不會存在重復的代碼,維護性也提高,代碼也更加簡潔,提高代碼的復用性(復用性主要是可以多次使用,不用再多次寫同樣的代碼) 繼承之后的代碼:、 企鵝類: public class Penguin extends Animal{public Penguin(String myName, int myid){super(myName, myid);}public void sum() {super.eat();super.sleep();super.introduction();} } 老鼠類: public class Mouse extends Animal {public Mouse(String myName, int myid) {super(myName, myid);}public void sum() {super.eat();super.sleep();super.introduction();} } 測試類: public class Test {public static void main(String[] args){Mouse mouse = new Mouse("mouse", 1);mouse.sum();Penguin penguin = new Penguin("penguin", 1);penguin.sum();} } 運行圖:

繼承的特性

  • 子類擁有父類非private的屬性,方法。
  • 子類可以擁有自己的屬性和方法,即子類可以對父類進行擴展。
  • 子類可以用自己的方式實現父類的方法。
  • Java的繼承是單繼承,但是可以多重繼承,單繼承就是一個子類只能繼承一個父類,多重繼承就是,例如A類繼承B類,B類繼承C類,所以按照關系就是C類是B類的父類,B類是A類的父類,這是java繼承區別于C++繼承的一個特性。
  • 提高了類之間的耦合性(繼承的缺點,耦合度高就會造成代碼之間的聯系)。

繼承關鍵字(extends)

繼承可以使用 extends 關鍵字,而且所有的類都是繼承于 java.lang.Object,當一個類沒有繼承extends關鍵字,則默認繼承object(這個類在?java.lang?包中,所以不需要?import)祖先類。 在 Java 中,類的繼承是單一繼承,也就是說,一個子類只能擁有一個父類,所以 extends 只能繼承一個類。 public class Penguin extends Animal{ } super 與 this 關鍵字 當new一個對象出來的時候,這個對象會產生一個this的引用,這個this引用指向對象自身并且this只能在類中的非靜態方法中使用。如果new出來的對象是一個子類對象的話,那么這個子類對象里面還會有一個super引用,這個super指向當前對象里面的父對象。所以相當于程序里面有一個this,this指向對象自己,還有一個super,super指向當前對象里面的父對象。在繼承中super關鍵和this作用類似,使得被隱藏的成員變量或者成員方法變為可見,或者說用來引用被隱藏的成員變量和成員成員方法。

super關鍵字:

1:調用父類的構造方法(構造函數) 子類不能繼承父類的構造器(構造方法或者構造函數),但是父類的構造器帶有參數的,則必須在子類的構造器中顯式地通過super關鍵字調用父類的構造器并配以適當的參數列表并且“super(參數列表)”這條語句只能用在子類構造方法體中的第一行。如果父類有無參構造器,則在子類的構造器中用super調用父類構造器不是必須的,如果沒有使用super關鍵字,系統會自動調用父類的無參構造器。 super(); //調用父類無參構造函數 super("參數") //調用父類有參構造函數 2:引用父類的屬性和方法 由于繼承過來的屬性和方法是默認隱藏的,所以當需要使用從父類繼承過來的屬性和方法時需要用super關鍵字來調用,并且引用這兩者時都必須放在子類方法的方法體中super.屬性名 //引用子類已繼承的屬性 super.方法名(參數列表) //引用子類已繼承的方法

this關鍵字:

指向自己的引用。(this是指向對象本身的一個指針)。? 更詳細的介紹請看下面的博客: http://lavasoft.blog.51cto.com/62575/18886/

關于子類不能繼承到那些父類的元素

1:父類的構造函數 2:父類的屬性和方法方面與他們的修飾符有關,與訪問修飾符保持一致。

轉載于:https://www.cnblogs.com/ytsbk/p/7436292.html

總結

以上是生活随笔為你收集整理的Java面向对象(二、继承)的全部內容,希望文章能夠幫你解決所遇到的問題。

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