鍍金池/ 教程/ Java/ Java方法重寫
Java for循環(huán)
Java接口
Java是什么?
Java命名約定
java中方法重載和方法重寫的區(qū)別
Java運(yùn)算符
Java抽象類
Java快速入門
Java實(shí)例初始化程序塊
Java靜態(tài)綁定和動(dòng)態(tài)綁定
Java do-while循環(huán)
Java對(duì)象克隆
Java Object類
Java聚合
Java繼承
Java this關(guān)鍵字
Java虛擬機(jī)內(nèi)部體系結(jié)構(gòu)
Java構(gòu)造器(構(gòu)造方法)
Eclipse安裝和配置
Java多態(tài)
Java方法重載
Java while循環(huán)
Java教程
Java按值調(diào)用和引用調(diào)用
Java strictfp關(guān)鍵字
Java封裝
Java語言特點(diǎn)
Java數(shù)組
Java instanceof運(yùn)算符
Java包裝類
Java命令行參數(shù)
Java包
Java面向?qū)ο螅∣OP)概念
簡(jiǎn)單Java程序
Java基礎(chǔ)實(shí)例程序
Java對(duì)象和類
Java continue語句
Java抽象類和接口的區(qū)別
C++ VS Java比較
Java if/else語句
Java switch語句
Java歷史
Java變量和數(shù)據(jù)類型
安裝Java環(huán)境(Linux)
Java JDK安裝和配置
Hello Java程序的內(nèi)部細(xì)節(jié)
Java break語句
Java方法重寫
Java Unicode編碼系統(tǒng)
怎么樣開始學(xué)習(xí)Java編程?
對(duì)象和類之間的區(qū)別
Java訪問修飾符
Java super關(guān)鍵字
Java注釋
JDK,JRE和JVM之間的區(qū)別
Java final關(guān)鍵字
Java static關(guān)鍵字

Java方法重寫

如果子類中具有與父類中聲明相同的方法,在java中稱為方法覆蓋。換句話說,如果子類提供了由其父類提供的其中一個(gè)方法的特定實(shí)現(xiàn),則它被稱為方法覆蓋。所以方法覆蓋有兩個(gè)前提條件:繼承和子父類中方法名稱相同。

Java方法覆蓋的用法

  • 方法重寫用于提供有別于超類提供的方法的特定實(shí)現(xiàn)。
  • 方法重寫用于運(yùn)行時(shí)多態(tài)性。

Java方法覆蓋的規(guī)則

  1. 方法必須與父類中的名稱相同。
  2. 方法必須具有與父類中相同的參數(shù)。
  3. 必須是IS-A關(guān)系(繼承)。

理解沒有方法覆蓋的問題

下面讓我們來了解如果在程序中不使用方法覆蓋可能面臨的問題。

class Vehicle {
    void run() {
        System.out.println("Vehicle is running");
    }
}

class Bike extends Vehicle {

    public static void main(String args[]) {
        Bike obj = new Bike();
        obj.run();
    }
}

執(zhí)行上面代碼,輸出結(jié)果如下 -

Vehicle is running

問題是,必須在子類中提供一個(gè)run()方法,這就是為什么要使用方法覆蓋。

方法覆蓋的示例

在下面的這個(gè)例子中,在父類中和子類中都定義了run方法,但子類中有一些特定的實(shí)現(xiàn)。 方法的名稱和參數(shù)是相同的,并且類之間有IS-A關(guān)系,因此這里run方法被覆蓋了。

class Vehicle {
    void run() {
        System.out.println("Vehicle is running");
    }
}

class Bike2 extends Vehicle {
    void run() {
        System.out.println("Bike is running safely");
    }

    public static void main(String args[]) {
        Bike2 obj = new Bike2();
        obj.run();
    }
}

執(zhí)行輸出結(jié)果如下 -

Bike is running safely

Java方法重寫的實(shí)例

考慮下面一個(gè)真實(shí)應(yīng)用的情況,Bank是一個(gè)提供獲取利率的功能的類。 但是,利息率因銀行不同而有所區(qū)別。 例如,SBI,ICICIAXIS銀行可以提供8%,7%9%的利率。

class Bank {
    int getRateOfInterest() {
        return 0;
    }
}

class SBI extends Bank {
    int getRateOfInterest() {
        return 8;
    }
}

class ICICI extends Bank {
    int getRateOfInterest() {
        return 7;
    }
}

class AXIS extends Bank {
    int getRateOfInterest() {
        return 9;
    }
}

class Test2 {
    public static void main(String args[]) {
        SBI s = new SBI();
        ICICI i = new ICICI();
        AXIS a = new AXIS();
        System.out.println("SBI Rate of Interest: " + s.getRateOfInterest());
        System.out.println("ICICI Rate of Interest: " + i.getRateOfInterest());
        System.out.println("AXIS Rate of Interest: " + a.getRateOfInterest());
    }
}

執(zhí)行輸出結(jié)果如下 -

SBI Rate of Interest: 8
ICICI Rate of Interest: 7
AXIS Rate of Interest: 9

問題:可以覆蓋靜態(tài)方法嗎?

答: 這是不可以的,靜態(tài)方法不能被覆蓋??梢酝ㄟ^運(yùn)行時(shí)多態(tài)來證明不能覆蓋,在稍后章節(jié)中將學(xué)習(xí)它。

問題: 為什么不能覆蓋靜態(tài)方法?
答: 因?yàn)殪o態(tài)方法是綁定類,而實(shí)例方法綁定對(duì)象。 靜態(tài)屬于類區(qū)域,實(shí)例屬于堆區(qū)域。

問題:可以重寫java main方法嗎?

答: 這是不可以的,因?yàn)?code>main是一個(gè)靜態(tài)方法。

java方法重載和方法重寫之間的區(qū)別: