最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java入門之繼承多態(tài)使用及說明

 更新時間:2025年09月21日 15:44:42   作者:小菘愛編程  
文章概述Java繼承與多態(tài)的核心概念,包括繼承的共性抽取、子類父類關系、super關鍵字的使用、構造方法與代碼塊執(zhí)行順序,以及向上轉型、動態(tài)綁定和重寫機制,最后預告多態(tài)內容并附練習題

Java繼承多態(tài)

本文主要講述繼承多態(tài)的基本知識,后續(xù)會專門出代碼篇

1.繼承

  • 概念:繼承就是對每個類的共性進行了抽取,從共性的類索取。
  • 實例:
public class Dog {
    public String name;
    public int age;
    public void run(){
        System.out.println(this.name+"正在玩球");
    }
}
 class Cat {
     public String name;
     public int age;

     public void run() {
         System.out.println(this.name + "正在奔跑");
     }
 }

其中我們不難發(fā)現(xiàn)狗和貓這兩個類有太多的重合,所以為了代碼的簡化優(yōu)化,我們可以將兩個類相同的進行抽取,定義出新的一個類"Animal"。

  • 下面是演示
public class Text extends Animal {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.run("小黃");
    }
}
 class Cat extends Animal {

 }
 class Dog extends Animal{

 }
 class Animal{
     public String name;
     public int age;

     public void run(String name) {
         this.name=name;
         System.out.println(this.name + "正在奔跑");
     }
 }

輸出結果:小黃正在奔跑

其中"extends"關鍵字代表繼承的含義,這樣我們就實現(xiàn)了代碼的簡潔優(yōu)化。

  • 什么是子類和父類?

在Java中子類是繼承父類的,上述代碼狗和貓就是子類,動物是父類。

  • 如果子類也有成員方法與父類的成員方法同名訪問的是子類還是父類呢?
    下面是演示:
public class Text extends Animal {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat("小黃");
    }
}
 class Dog extends Animal{
    public void eat(String name){
        this.name=name;
        System.out.println(this.name+"正在吃狗糧");
    }

 }
 class Animal{
     public String name;
     public int age;
     public void eat(String name){
         this.name=name;
         System.out.println(this.name+"正在吃飯");
     }
 }

輸出:小黃正在吃狗糧

如果訪問的成員方法子類中有,優(yōu)先訪問自己的成員變量

同理我們也可以推導出:如果訪問的成員變量子類中有,優(yōu)先訪問自己的成員變量

  • 若成員方法的名不同那么該如何訪問?
public class Base {
   public void methodA(){
       System.out.println("Base中的methodA()");
   }
}
public class Derived extends Base{
   public void methodB(){
       System.out.println("Derived中的methodB()方法");
   }
   public void methodC(){
       methodB(); // 訪問子類自己的methodB()
       methodA(); // 訪問父類繼承的methodA()
// methodD(); // 編譯失敗,在整個繼承體系中沒有發(fā)現(xiàn)方法methodD()
   }
}

2.super關鍵字

super關鍵字是專門用來訪問父類的成員變量與this關鍵字的用法基本相同

  • 1.可以訪問父類的成員變量
  • 2.可以訪問父類的成員方法
  • 3.可以訪問父類的構造方法
  • 4.只能在方法中的第一行使用
  • 5.只能在類的非靜態(tài)方法中使用,用來訪問非靜態(tài)成員方法和字段

示例:

public class Text {
    public static void main(String[] args) {
        Dog dog=new Dog();
        dog.text();
    }
}
class Dog extends Animal{
    public void text(){
        super.eat("大黑",10);
    }
}
class Animal{
    public String name;
    public int age;
    public void eat(String name,int age){
        this.age=age;
        this.name=name;
        System.out.println(this.name+this.age+"歲"+"正在吃飯");
    }
}

輸出:大黑10歲正在吃飯

public class Text {
    public static void main(String[] args) {
        Dog dog=new Dog();
        dog.text();
    }
}
class Dog extends Animal{
    public String name="huang";
    public void text(){
        System.out.println(super.name);
    }
}
class Animal{
    public String name="大黑";
    public int age;
    }

輸出:大黑

3.子類父類的構造方法

  • 在講super引用構造方法前先了解子類父類的構造方法

父子父子,先有父再有子,即:子類對象構造時,需要先調用基類構造方法,然后執(zhí)行子類的構造方法

class Dog extends Animal{
    public String name="huang";

    public Dog(String name, int age) {
        super(name, age);
    }
}
class Animal{
    public String name;
    public int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

如果父類出現(xiàn)了構造方法且?guī)底宇惐仨氁残枰霈F(xiàn)構造方法,且需要將父類的構造方法的參數值初始化用super()關鍵字。

class Dog extends Animal{
    public String name="huang";

    public Dog(String name, int age) {
    }
}
class Animal{
    public String name;
    public int age;

    public Animal() {
        this.name = name;
        this.age = age;
    }

如果父類的構造方法沒有參數則不需要子類必須使用super(),因為系統(tǒng)會默認給一個super()或者可以不寫子類的構造方法系統(tǒng)也會默認有子類的構造方法。

4.代碼塊與方法的執(zhí)行順序

  • 什么是代碼塊?

代碼塊有靜態(tài)代碼塊和實例的代碼塊

static
    {
        System.out.println("a");
    }//靜態(tài)
    
    {
        System.out.println("a");
    }//實例

如果一個程序有代碼塊,構造方法,子類父類順序是怎樣的呢?

  • 先執(zhí)行父類靜態(tài)代碼塊再執(zhí)行子類的靜態(tài)代碼塊
  • 再執(zhí)行父類的實例代碼塊
  • 再執(zhí)行父類的構造方法
  • 再執(zhí)行子類的實例代碼塊
  • 最后執(zhí)行子類的構造方法
class Person {
   public String name;
   public int age;
   public Person(String name, int age) {
       this.name = name;
       this.age = age;
       System.out.println("cccc");
   }
   {
       System.out.println("bbbb");
   }
   static {
       System.out.println("aaaa");
   }
}
public class Text{
   public static void main(String[] args) {
       Person person1 = new Person("2",10);
       System.out.println("============================");
       Person person2 = new Person("1",20);
   }
}

輸出:

aaaa
bbbb
cccc
bbbb
cccc

所以靜態(tài)代碼塊只執(zhí)行一次!并優(yōu)先執(zhí)行!

在使用訪問限定符時我們要盡可能小范圍,因此我們在使用的時候應該盡可能的使用 比較嚴格 的訪問權限. 例如如果一個方法能用 private, 就盡量不要用 public。

5.向上轉型

這里使用于子類訪問父類的對象

  • 三種形式
public class Text {
    public static void main(String[] args) {
        Animal animal=new Dog();
    }
}
class Dog extends Animal{

}
class Animal{

}//直接轉型
public class Text {
    public static void main(String[] args) {
        Dog dog=new Dog();
        fun(dog);

    }
    public static void fun(Animal animal){

    }

}//利用方法轉型
public class Text {
    public static void main(String[] args) {
        Animal animal=fun();
    }
    public static Animal fun(){
        Dog dog=new Dog();
        return dog;

    }

}//利用返回值
  • 向上轉型的缺點

當子類有父類沒有的成員方法時,不能用父類的引用指向子類的成員方法

public class Text {
    public static void main(String[] args) {
        Animal animal=fun();
        animal.bark();//編譯器會報錯
    }
    public static Animal fun(){
        Dog dog=new Dog();
        return dog;

    }

}
class Dog extends Animal{
    public void bark(){
        System.out.println("狗叫");
    }

}

6.動態(tài)綁定

當子類完成了向上轉型,子類與父類的方法構成了重寫,此時animal.bark()就要調用子類的成員方法

  • 什么是重寫

重寫是子類對父類非靜態(tài)、非private修飾,非final修飾,非構造方法等的實現(xiàn)過程進行重新編寫, 類名返回值和形參都不能改變

示例:

public class Text {
    public static void main(String[] args) {
        Animal animal=new Dog("小黃",10);
        animal.eat();

    }
}
     class Animal {
        public String name;
        public int age;

        public Animal(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public void eat() {
            System.out.println(this.name + " 正在吃飯.....");
        }
    }

     class Dog extends Animal {
        public Dog(String name, int age) {
            super(name, age);
        }

        public void bark() {
            System.out.println(this.name + " 正在汪汪汪叫...");
        }

        @Override
        public void eat() {
            System.out.println(this.name + " 正在吃狗糧...");
        }

    }

輸出:小黃 正在吃狗糧…

結語

以上是Java繼承的內容,下次小編會帶來多態(tài)的內容,希望讀者們多提建議。

最后小編整理了一道題目

如下代碼的 結果是什么 ?
class Base {
  Base() {
  	System.out.print("Base"); 
  }
}

public class Alpha extends Base {
 
  public static void main( String[] args ) {
    new Alpha();//1
    //調用父類無參的構造方法
    new Base();//2
  } 
}

A.Base
B.BaseBase
C.編譯失敗
D.代碼運行但沒有輸出
E.運行時拋出異常

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 教你怎么用idea創(chuàng)建web項目

    教你怎么用idea創(chuàng)建web項目

    好多朋友在使用IDEA創(chuàng)建項目時,總會碰到一些小問題.現(xiàn)在我們就演示一下使用IDEA創(chuàng)建web項目的完整步驟吧.文中有非常詳細的圖文示例哦,,需要的朋友可以參考下
    2021-05-05
  • Java獲取時間如何將當前時間減一天、一月、一年、并格式化

    Java獲取時間如何將當前時間減一天、一月、一年、并格式化

    這篇文章主要介紹了Java獲取時間,將當前時間減一天、一月、一年,并加以格式化,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Java中零拷貝和深拷貝的原理及實現(xiàn)探究(代碼示例)

    Java中零拷貝和深拷貝的原理及實現(xiàn)探究(代碼示例)

    深拷貝和零拷貝是兩個在 Java 中廣泛使用的概念,它們分別用于對象復制和數據傳輸優(yōu)化,下面將詳細介紹這兩個概念的原理,并給出相應的 Java 代碼示例,感興趣的朋友一起看看吧
    2023-12-12
  • java小程序火鍋店點餐系統(tǒng)

    java小程序火鍋店點餐系統(tǒng)

    這篇文章主要介紹了java小程序火鍋店點餐系統(tǒng),采用Java語言和Vue技術,以小程序模式實現(xiàn)的火鍋點菜系統(tǒng),文中提供了解決思路和部分實現(xiàn)代碼,需要的朋友可以參考下
    2023-03-03
  • Java泛型定義與用法實例詳解

    Java泛型定義與用法實例詳解

    這篇文章主要介紹了Java泛型定義與用法,結合實例形式較為詳細的分析了Java中泛型的概念、原理、定義、使用方法及相關操作注意事項,需要的朋友可以參考下
    2018-08-08
  • Java操作mongodb增刪改查的基本操作實戰(zhàn)指南

    Java操作mongodb增刪改查的基本操作實戰(zhàn)指南

    MongoDB是一個基于分布式文件存儲的數據庫,由c++語言編寫,旨在為WEB應用提供可擴展的高性能數據存儲解決方案,下面這篇文章主要給大家介紹了關于Java操作mongodb增刪改查的基本操作實戰(zhàn)指南,需要的朋友可以參考下
    2023-05-05
  • 詳解Http協(xié)議以及post與get區(qū)別

    詳解Http協(xié)議以及post與get區(qū)別

    這篇文章主要介紹了詳解Http協(xié)議以及post與get區(qū)別,通過分別說明Http協(xié)議以及get與post各自的概念,再到兩者作比較有著詳細的說明,希望對你有所幫助
    2021-06-06
  • Java?Stream?API?使代碼更出色的操作完全攻略

    Java?Stream?API?使代碼更出色的操作完全攻略

    這篇文章主要介紹了Java?Stream?API?使代碼更出色的操作完全攻略,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • SpringBoot配置文件啟動加載順序的方法步驟

    SpringBoot配置文件啟動加載順序的方法步驟

    SpringBoot的啟動加載順序涉及多個步驟和組件,通過分層和優(yōu)先級機制加載配置文件,確保在啟動時正確配置應用程序,本文就來介紹一下SpringBoot配置文件啟動加載順序的方法步驟,感興趣的可以了解一下
    2024-11-11
  • Springboot如何實現(xiàn)對配置文件中的明文密碼加密

    Springboot如何實現(xiàn)對配置文件中的明文密碼加密

    這篇文章主要介紹了Springboot如何實現(xiàn)對配置文件中的明文密碼加密問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論

奉新县| 墨脱县| 通榆县| 日土县| 彩票| 留坝县| 高雄县| 班戈县| 武穴市| 铜梁县| 台州市| 汾阳市| 武胜县| 孝感市| 武乡县| 白玉县| 浦县| 敖汉旗| 叙永县| 类乌齐县| 玉林市| 绥中县| 阿坝县| 安多县| 六枝特区| 荃湾区| 广宗县| 旌德县| 南岸区| 普宁市| 寿光市| 孙吴县| 商水县| 阿鲁科尔沁旗| 来宾市| 九寨沟县| 凤凰县| 百色市| 宜丰县| 临潭县| 宜州市|