中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

用代碼實例解析Java面向對象之繼承性

發布時間:2020-07-21 09:25:25 來源:億速云 閱讀:150 作者:小豬 欄目:編程語言

小編這次要給大家分享的是用代碼實例解析Java面向對象之繼承性,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

一、類的繼承

A類繼承B類,是指A類可以擁有B類的非私有屬性和方法,同時A類也可以自己定義屬性方法或重寫方法以擴充自己的功能。

1.1 方法的重寫

重寫方法時,方法的方法名、返回值類型和參數個數及類型均需一致。
首先定義父類Animal,包含年齡、名字兩個屬性及吃的方法。

public class Animal {
 int age;
 String name;
 public void eat(){
  System.out.println("動物可以吃東西");
 }
}

通過子類Dog繼承父類Animal,并重寫eat方法,在調用重寫的eat方法之前,設置繼承來的年齡屬性值為10。

public class Dog extends Animal{
 public void eat(){
  System.out.println(age+"歲的狗狗可以吃東西");
 }
 public static void main(String[] args) {
  Dog dog1 = new Dog();
  dog1.age = 10;
  dog1.eat();//10歲的狗狗可以吃東西
 }
}

1.2 繼承的初始化順序

初始化即執行類的構造方法,在Java中,繼承的初始化順序如下:

父類的屬性 > 父類的構造方法 > 子類的屬性 > 子類的構造方法

public class Animal {
 int age = 10;
 public Animal(){
  System.out.println("父類Animal執行了");
  age = 20;
 }
}
public class Dog extends Animal{
 public Dog(){
  System.out.println("子類Dog執行了");
 }
 public static void main(String[] args) {
  Animal a = new Animal();
  System.out.println(a.age);
  Dog dog1 = new Dog();
 }
}

運行結果如下圖所示:

用代碼實例解析Java面向對象之繼承性

當使用final關鍵字后,變量就成了常量,值不能被改變;方法也不能被繼承使用。

二、this與super

2.1 this關鍵字

this關鍵字代表當前對象,this.屬性代表操作當前對象的屬性,this.方法代表調用當前對象的方法。

2.2 super關鍵字

super在對象內部使用,代表父類對象。如果要調用父類的屬性age,使用super.age;如果要調用父類的方法eat(),使用super.eat()。如下代碼所示:

public class Dog extends Animal{
 int age = 20;
 public void eat(){
  System.out.println(age+"歲的狗狗可以吃東西");
 }
 public Dog(){
  System.out.println("子類Dog執行了");
 }
 public void method(){
  super.eat();
 }
 public static void main(String[] args) {
  Dog dog1 = new Dog();
  dog1.method();//動物可以吃東西
 }
}

子類構造的過程當中,必須調用其父類的構造方法。在子類的構造方法第一句隱式的寫了一句super();。

public class Dog extends Animal{
 int age = 20;
 public Dog(){
  super();//寫與不寫都一樣,系統隱式調用
  System.out.println("子類Dog執行了");
 }
 public static void main(String[] args) {
  Dog dog1 = new Dog();
  //父類Animal執行了
  //子類Dog執行了
 }
}

如果子類的構造方法中沒有顯示的調用父類的構造方法,則系統默認調用父類無參的構造方法。如果顯示的調用構造方法,必須在構造方法的第一行。

所以,如果子類的構造方法中既沒有顯示的調用父類的構造方法,而父類又沒有無參的構造方法,則編譯出錯。

三、Object類

Object類是所有類的父類,默認被所有類繼承。

3.1 toString()

toString()方法返回對象的地址(即Hash碼),如果要查看對象的屬性及屬性值,則可以重寫toString()方法(通過eclipse菜單中source可自動生成)。

public class Dog extends Animal{
 int age = 20;
 @Override
 public String toString() {
  return "Dog [age=" + age + "]";
 }
 public static void main(String[] args) {
  Dog dog1 = new Dog();
  System.out.println(dog1.toString());//未重寫方法前的結果:Dog@15db9742
  System.out.println(dog1.toString());//Dog [age=20]
 }
}

3.2 equals()

equals()方法比較的是兩個對象的引用是否指向同一塊內存地址。

public class Dog extends Animal{
 public static void main(String[] args) {
  Dog dog1 = new Dog();
  Dog dog2 = new Dog();
  if(dog1.equals(dog2)){
   System.out.println("兩個對象相同");
  }else{
   System.out.println("兩個對象不同");
  }
 }
}

輸出的結果是“兩個對象不同”。如果僅需判斷兩個對象的屬性值是否相等,可以通過eclipse重寫equals方法。如下代碼所示:

public class Dog extends Animal{
 @Override
 public boolean equals(Object obj) {
  if (this == obj) //如果參數對象和當前對象相同,則一定相同
   return true;
  if (obj == null) //如果參數對象為空,則一定不同
   return false;
  if (getClass() != obj.getClass())//如果參數對象的類對象和當前對象的類對象不相等,則不相同
   return false;
  Dog other = (Dog) obj;//將參數進行強制轉換
  if (age != other.age) //若屬性值相等,則相同
   return false;
  return true;
 }
 public static void main(String[] args) {
  Dog dog1 = new Dog();
  dog1.age = 15;
  Dog dog2 = new Dog();
  dog2.age = 15;
  if(dog1.equals(dog2)){
   System.out.println("兩個對象相同");
  }else{
   System.out.println("兩個對象不同");
  }
 }
}

最后輸出結果是,兩個對象相同。

看完這篇關于用代碼實例解析Java面向對象之繼承性的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

娄底市| 成都市| 怀柔区| 泌阳县| 杭锦后旗| 顺平县| 定边县| 南乐县| 江阴市| 荔波县| 阳朔县| 福建省| 珠海市| 岳西县| 碌曲县| 佛山市| 拉萨市| 成安县| 汨罗市| 会理县| 云南省| 商南县| 惠来县| 枣庄市| 周宁县| 扶沟县| 建始县| 潜江市| 榆树市| 肃宁县| 佛坪县| 大足县| 上饶县| 乳源| 天柱县| 邹城市| 若尔盖县| 锡林郭勒盟| 灵丘县| 社旗县| 三穗县|