精品丰满熟女一区二区三区_五月天亚洲欧美综合网_亚洲青青青在线观看_国产一区二区精选

  • <menu id="29e66"></menu>

    <bdo id="29e66"><mark id="29e66"><legend id="29e66"></legend></mark></bdo>

  • <pre id="29e66"><tt id="29e66"><rt id="29e66"></rt></tt></pre>

      <label id="29e66"></label><address id="29e66"><mark id="29e66"><strike id="29e66"></strike></mark></address>
      學(xué)習(xí)啦>知識(shí)大全>知識(shí)百科>百科知識(shí)>

      重載和覆蓋的區(qū)別都有哪些

      時(shí)間: 映芳735 分享

        重載和覆蓋是多態(tài)性的兩大主要表現(xiàn),學(xué)習(xí)代碼的朋友對(duì)此可能會(huì)有所了解,但是可能理解不深,下面是小編帶來(lái)的關(guān)于重載和覆蓋的區(qū)別的內(nèi)容,歡迎大家閱讀!

        重載和覆蓋的區(qū)別

        在同一個(gè)類(lèi)中方法成員的名稱(chēng)相同,但參數(shù)的類(lèi)型和個(gè)數(shù)不同,這稱(chēng)為重載。

        在存在繼承關(guān)系的兩個(gè)話,子類(lèi)與父類(lèi)的方法成員名稱(chēng)相同、參數(shù)的類(lèi)型和個(gè)數(shù)相同的話,子類(lèi)的方法覆蓋父類(lèi)的方法,這稱(chēng)為覆蓋。

        下面舉個(gè)例子說(shuō)明一下。例如:

        class Shape {

        void draw() {}

        void erase() {}

        }

        class Circle extends Shape {

        void draw() {

        System.out.println("Circle.draw()");

        }

        void erase() {

        System.out.println("Circle.erase()"); }

        }

        class Square extends Shape {

        void draw() {

        System.out.println("Square.draw()");

        }

        void erase() {

        System.out.println("Square.erase()");

        }

        }

        class Triangle extends Shape {

        void draw() {

        System.out.println("Triangle.draw()");

        }

        void erase() {

        System.out.println("Triangle.erase()");

        }

        }

        public class Test {

        public static Shape randShape() {

        switch((int)(Math.random() * 3)) {

        default:

        case 0: return new Circle();

        case 1: return new Square();

        case 2: return new Triangle();

        } }

        public static void main(String[] args) {

        Shape[] s = new Shape[9];

        for(int i = 0; i < s.length; i++)

        s[i] = randShape();

        for(int i = 0; i < s.length; i++)

        s[i].draw();

        }

        }

        輸出結(jié)果

        Triangle.draw()

        Circle.draw()

        Triangle.draw()

        Triangle.draw()

        Triangle.draw()

        Square.draw()

        Square.draw()

        Triangle.draw()

        Circle.draw()

        Triangle.erase()

        Circle.erase()

        Triangle.erase()

        Triangle.erase()

        Triangle.erase()

        Square.erase()

        Square.erase()

        Triangle.erase()

        Circle.erase()

        Press any key to continue...

        又一次執(zhí)行

        Triangle.draw()

        Triangle.draw()

        Circle.draw()

        Circle.draw()

        Circle.draw()

        Triangle.draw()

        Triangle.draw()

        Square.draw()

        Circle.draw()

        Triangle.erase()

        Triangle.erase()

        Circle.erase()

        Circle.erase()

        Circle.erase()

        Triangle.erase()

        Triangle.erase()

        Square.erase()

        Circle.erase()

        Press any key to continue...

        兩次執(zhí)行結(jié)果不同的原因是其中的Math.random()這個(gè)類(lèi)導(dǎo)致的,math.random()得到的數(shù)是0-1之間的隨機(jī)數(shù)。

        不過(guò),最重要的一點(diǎn)區(qū)別是:通過(guò)方法重載進(jìn)而實(shí)現(xiàn)對(duì)象的多態(tài)性。

        方法重載是指功能相同的多個(gè)方法使用同一個(gè)方法名。同名的多個(gè)方法的參數(shù)要有所不同,即在參數(shù)類(lèi)型,參數(shù)個(gè)數(shù)和參數(shù)順序上要有所區(qū)別,以便作為選擇某個(gè)方法的根據(jù)。通常只有功能相同的方法進(jìn)行重載才有意義。

        例如:計(jì)算兩個(gè)數(shù)之和的重載方法定義如下:

        int add(int i,int j)

        {retrun i+j;}

        float add(float i,float j)

        {retrun i+j;}

        double add(double i,double j)

        {retrun i+j;}

        重載方法的選擇通常是在編譯時(shí)進(jìn)行。系統(tǒng)根據(jù)不同的參數(shù)類(lèi)型,個(gè)數(shù)或順序,尋找最佳匹配方法.方法類(lèi)型不參與匹配。

        重載和覆蓋的介紹

        多態(tài)性也是面向?qū)ο蠓椒ǖ囊粋€(gè)重要特性.多態(tài)性是指在在程序中出現(xiàn)的"重名"現(xiàn)象,即在一個(gè)程序中相同的名字可以表示不同的實(shí)現(xiàn).

        在JAVA中,多態(tài)性主要表現(xiàn)在如下兩個(gè)方面:

        (1)方法重載.通常指在同一個(gè)類(lèi)中,相同的方法名對(duì)應(yīng)著不同的方法實(shí)現(xiàn),但是方法的參數(shù)不同.

        (2)成員覆蓋.通常指在不同類(lèi)(父類(lèi)和子類(lèi))中,允許有相同的變量名,但是數(shù)據(jù)類(lèi)型不同;也允許有相同的方法名,但是對(duì)應(yīng)的方法實(shí)現(xiàn)不同.

        在重載的情況下,同一類(lèi)中具有相同的名字的方法.如何選擇它的方法體呢?不能使用類(lèi)名來(lái)區(qū)分,通常采用不同的方法形參表,區(qū)分重載要求形參在類(lèi)型,個(gè)數(shù)和順序的不同,在定義重載方法時(shí),應(yīng)在方法的形參的類(lèi)型,個(gè)數(shù)和順序有所不同,以便在選擇時(shí)能夠區(qū)別開(kāi)來(lái).

        在覆蓋的情況下,同名的方法存在于不同的類(lèi)中,在調(diào)用方法只要指明其方法所歸屬的類(lèi)名就可以了.

        重載與覆蓋的具體例子

        public class Base{

        int a,b;

        public Base(int x,int y){

        a = x;

        b = y;

        }

        public int add(){

        return (a + b);

        }

        public void add(int x,int y){

        int z;

        z = x + y;

        }

        }

        上面這段代碼就是重載的三個(gè)特征 :

        1:方法名必須一樣 “add()“。

        2:返回類(lèi)型可以不一樣 就象是 ”int “和”void“.

        3:參數(shù)可以不一樣 就是add() 和add(int x,int y)這樣的。

        public class Base{

        int x,y;

        public void add(){

        int z;

        z = x + y;

        }

        }

        public class Child extends Base{

        int x,y;

        public void add(){

        int z;

        z = x + y;

        }

        public static void main(string [] args){

        Base b = new Child();

        b.add();

        }

        }

        下面這個(gè)例子就是重寫(xiě),他實(shí)現(xiàn)了多態(tài)。

        重寫(xiě)的要求是,方法名必須一樣,返回類(lèi)型必須一樣,傳入的參數(shù)必須一樣。

        在main函數(shù)中定義父類(lèi)的對(duì)象,但是用子類(lèi)去實(shí)例化他,這樣就可以通過(guò)父類(lèi)的對(duì)象調(diào)用到子類(lèi)的方法。

        下面舉個(gè)例子,例如:

        public class Parent {

        public int addValue( int a, int b) {

        int s;s = a+b;return s;

        }

        }

        class Child extends Parent {

        }

        Which methods can be added into class Child?

        a int addValue( int a, int b ){// do something...}

        b public void addValue (){// do something...}

        c public int addValue( int a ){// do something...}

        d public int addValue( int a, int b )throws MyException {//do something...}

        答案為B.C

        解釋1:

        a是覆蓋,b ,c是重載。

        a的問(wèn)題出在訪問(wèn)權(quán)限上,如果換成public也是可以的。

        d是異常的問(wèn)題。

        解釋2:

        a的訪問(wèn)權(quán)限小于父類(lèi),所以錯(cuò)誤,d是異常錯(cuò)誤,b和c中的addValue方法和父類(lèi)的方法參數(shù)不同,所以是重載。


      猜你感興趣:

      1.亞信科技面試題及參考答案

      2.C++基礎(chǔ)筆試題及答案

      3.重載和覆蓋的區(qū)別

      4.C/C++筆試題目

      5.Java中覆蓋和重載的區(qū)別

      6.java中重寫(xiě)和重載的區(qū)別

      重載和覆蓋的區(qū)別都有哪些

      重載和覆蓋是多態(tài)性的兩大主要表現(xiàn),學(xué)習(xí)代碼的朋友對(duì)此可能會(huì)有所了解,但是可能理解不深,下面是小編帶來(lái)的關(guān)于重載和覆蓋的區(qū)別的內(nèi)容,歡迎大家閱讀! 重載和覆蓋的區(qū)別 在同一個(gè)類(lèi)中方法成員的名稱(chēng)相同,但參數(shù)的類(lèi)型和個(gè)數(shù)不同,這
      推薦度:
      點(diǎn)擊下載文檔文檔為doc格式

      精選文章

      • Java中覆蓋和重載的區(qū)別
        Java中覆蓋和重載的區(qū)別

        對(duì)于Java中重載和覆蓋的概念,很多人到現(xiàn)在都是搞不清楚,下面小編舉例給大家講講這兩者的區(qū)別。 一、覆蓋 1 override可以翻譯為覆蓋,從字面就可以知道

      • 重寫(xiě)和重載的區(qū)別_重寫(xiě)和重載的不同之處
        重寫(xiě)和重載的區(qū)別_重寫(xiě)和重載的不同之處

        在Java中,重寫(xiě)和重載都是Java多態(tài)性的兩種不同表現(xiàn)形式,這兩者之間的區(qū)別是人們好奇的。下面,小編跟大家講一講重寫(xiě)和重載的不同之處吧。 重寫(xiě)的定

      • Java中HashMap和Hashtable之間的區(qū)別
        Java中HashMap和Hashtable之間的區(qū)別

        HashMap和Hashtable是 Java Collection Framework 的兩個(gè)重要成員,它們之間存在什么樣的區(qū)別呢?下面學(xué)習(xí)啦小編帶你去了解了解一下。 1、 繼承和實(shí)現(xiàn)的區(qū)別 Hashta

      • Java中抽象類(lèi)與接口的區(qū)別
        Java中抽象類(lèi)與接口的區(qū)別

        抽象類(lèi)和接口是Java語(yǔ)言中對(duì)于抽象類(lèi)定義進(jìn)行支持的兩種機(jī)制,正是由于這兩種機(jī)制的存在,才賦予了Java強(qiáng)大的面向?qū)ο竽芰?。抽象?lèi)和接口之間在對(duì)于

      537743