亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java基礎(chǔ)之方法重寫(xiě)詳解

 更新時(shí)間:2021年05月06日 14:48:55   作者:qq_45671732  
這篇文章主要介紹了Java基礎(chǔ)之方法重寫(xiě)詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下

一、java方法重寫(xiě)

方法的重寫(xiě)是子類(lèi)根據(jù)需求對(duì)父類(lèi)繼承的方法進(jìn)行重新的編寫(xiě),在重寫(xiě)時(shí),可以使用super方法的方式來(lái)保留父類(lèi)中的方法,注意:構(gòu)造方法不可以被重寫(xiě)。

創(chuàng)建一個(gè)人類(lèi),屬性包括姓名 性別 年齡 行為方法是輸出信息

二、super關(guān)鍵字

方法重寫(xiě)時(shí)要在子類(lèi)中定義一個(gè)和父類(lèi)相同名稱(chēng)的方法,并采用super關(guān)鍵字super.方法名();,這樣就實(shí)現(xiàn)了方法的重寫(xiě)

package cn.zhz.Kind.dh;

public class Person1 {
    public String sex;
    public String name;
    public int age;

    public void showInfo() {
        System.out.println("姓名:" + name + "年齡:" + age + "性別:" + sex);
    }
}

創(chuàng)建一個(gè)學(xué)生類(lèi),屬性包括學(xué)號(hào) 學(xué)科,行為方法是輸出信息

package cn.zhz.Kind.dh;

public class Student1 extends Person1{
    public int stuId;
    public String stuSubject;
    public void showInfo(){
        super.showInfo();
        System.out.println("學(xué)號(hào):"+ stuId+ "學(xué)科:"+ stuSubject);
    }
}

創(chuàng)建學(xué)生類(lèi)的一個(gè)實(shí)例,進(jìn)行賦值操作,賦值后輸出

package cn.zhz.Case.dh;

import cn.zhz.Kind.dh.Student1;

public class Student1Test {
    public static void main(String[] args) {
        Student1 student1 = new Student1();
        student1.stuId = 1;
        student1.name = "張三";
        student1.age = 18;
        student1.sex = "男";
        student1.stuSubject = "物理";
        student1.showInfo();
    }
}

2.1 super關(guān)鍵字的介紹

super可以應(yīng)用在子類(lèi)訪問(wèn)父類(lèi)成員中,比如說(shuō):

訪問(wèn)父類(lèi)的屬性super.print(); 注意是非private的方法
訪問(wèn)父類(lèi)的方法super.name;
訪問(wèn)父類(lèi)的構(gòu)造方法super();

package cn.zhz.Inherit.dh;

public class Pet {
    private String name = "無(wú)名氏";
    private int health = 100;
    private int love = 0;
    public int age = 1;

    public Pet() {
        System.out.println("父類(lèi)無(wú)參構(gòu)造方法");
    }

    public Pet(String name) {
        this.name = name;
    }

    public Pet(String name, int health, int love) {
        //this可以調(diào)用本類(lèi)的構(gòu)造方法,且在第一行
        //this(name);
        this.name = name;
        this.health = health;
        this.love = love;
        System.out.println("父類(lèi)帶參構(gòu)造方法");
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setHealth(int health) {
        if (health < 0 || health > 100) {
            System.out.println("寵物的健康值在0-100之間");
            this.health = 60;
            return;
        }
        this.health = health;
    }

    public int getHealth() {
        return this.health;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public void setLove(int love) {
        if (love < 0 || love > 100) {
            System.out.println("寵物的親密度只能在0-100之間");
            this.love = 60;
            return;
        }
        this.love = love;
    }

    public int getLove() {
        return this.love;
    }

    //輸出寵物的信息
    public void print() {
        System.out.println("寵物的自白:\n我的名字叫" + this.name + "健康值是" + this.health + "和主人的親密度是:" + this.love);
    }
}
package cn.zhz.Inherit.dh;

public class Dog extends Pet {
    private String strain = "聰明的拉布拉多犬";

    public Dog() {
        System.out.println("子類(lèi)狗狗的無(wú)參構(gòu)造方法");
    }

    public Dog(String name, int health, int love, String strain) {
        //通過(guò)super調(diào)用父類(lèi)的構(gòu)造方法,必須是第一句
        //super();
        super(name, health, love);
        this.strain = strain;
        System.out.println("狗狗的帶參構(gòu)造方法");
    }

    public void setStrain(String strain) {
        this.strain = strain;
    }

    public String getStrain() {
        return this.strain;
    }

    public void print() {
        //調(diào)用父類(lèi)的非private的print()方法
        super.print();
        System.out.println("我是一只" + this.strain);
    }

    public void m1() {
        //super不可以調(diào)用父類(lèi)的private屬性
//        System.out.println(super.name);
        System.out.println(super.age);
    }
}

在使用super關(guān)鍵字來(lái)訪問(wèn)父類(lèi)的成員時(shí),使用super關(guān)鍵字,super代表的是父類(lèi)的對(duì)象,super只可以出現(xiàn)在子類(lèi)的方法和構(gòu)造方法中,使用super調(diào)用構(gòu)造方法時(shí),只可以是第一句,super不可以訪問(wèn)父類(lèi)的private成員。

2.2 super關(guān)鍵字的使用

當(dāng)子類(lèi)中的方法重寫(xiě)了父類(lèi)的方法,或者是在子類(lèi)中定義了和父類(lèi)的同名稱(chēng)的成員變量,使用super關(guān)鍵字可以使被屏蔽的成員可見(jiàn)。.

package cn.zhz.Inherit.dh;

public class Pet {
    private String name = "無(wú)名氏";
    private int health = 100;
    private int love = 0;
    public int age = 1;

    public Pet() {
        System.out.println("父類(lèi)無(wú)參構(gòu)造方法");
    }

    public Pet(String name) {
        this.name = name;
    }

    public Pet(String name, int health, int love) {
        //this可以調(diào)用本類(lèi)的構(gòu)造方法,且在第一行
        //this(name);
        this.name = name;
        this.health = health;
        this.love = love;
        System.out.println("父類(lèi)帶參構(gòu)造方法");
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setHealth(int health) {
        if (health < 0 || health > 100) {
            System.out.println("寵物的健康值在0-100之間");
            this.health = 60;
            return;
        }
        this.health = health;
    }

    public int getHealth() {
        return this.health;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public void setLove(int love) {
        if (love < 0 || love > 100) {
            System.out.println("寵物的親密度只能在0-100之間");
            this.love = 60;
            return;
        }
        this.love = love;
    }

    public int getLove() {
        return this.love;
    }

    //輸出寵物的信息
    public void print() {
        System.out.println("寵物的自白:\n我的名字叫" + this.name + "健康值是" + this.health + "和主人的親密度是:" + this.love);
    }
}

子類(lèi)和父類(lèi)中同時(shí)定義了一個(gè)age屬性,子類(lèi)調(diào)用這個(gè)age屬性時(shí)先會(huì)在本類(lèi)中找,這時(shí)可以使用super關(guān)鍵字代表父類(lèi),用super.屬性的方式調(diào)用父類(lèi)中的age屬性

package cn.zhz.Inherit.dh;

public class Dog extends Pet {
    private String strain = "聰明的拉布拉多犬";
    private int age = 10;

    public Dog() {
        System.out.println("子類(lèi)狗狗的無(wú)參構(gòu)造方法");
    }

    public Dog(String name, int health, int love, String strain) {
        //通過(guò)super調(diào)用父類(lèi)的構(gòu)造方法,必須是第一句
        //super();
        super(name, health, love);
        this.strain = strain;
        System.out.println("狗狗的帶參構(gòu)造方法");
    }

    public void setStrain(String strain) {
        this.strain = strain;
    }

    public String getStrain() {
        return this.strain;
    }

    public void print() {
        //調(diào)用父類(lèi)的非private的print()方法
        super.print();
        System.out.println("我是一只" + this.strain);
    }

    public void m1() {
        //super不可以調(diào)用父類(lèi)的private屬性
//        System.out.println(super.name);
        System.out.println(super.age);
    }

    public void m2() {
        //子類(lèi)會(huì)覆蓋服了誒的同名成員
        System.out.println(this.age);
        //可以使用super關(guān)鍵字調(diào)用父類(lèi)被子類(lèi)覆蓋的成員
        System.out.println(super.age);
    }
}

super和this的區(qū)別

區(qū)別 this super
訪問(wèn)屬性 訪問(wèn)本類(lèi)的屬性,如果沒(méi)有則從父類(lèi)中找 訪問(wèn)父類(lèi)中的屬性
訪問(wèn)方法 訪問(wèn)本類(lèi)方法,如果沒(méi)有從父類(lèi)中找 訪問(wèn)父類(lèi)的方法
訪問(wèn)構(gòu)造方法 調(diào)用本類(lèi)的構(gòu)造方法,方法構(gòu)造方法的首行 調(diào)用父類(lèi)的構(gòu)造方法,放在子類(lèi)的構(gòu)造方法的首行

總結(jié)的來(lái)說(shuō)是this代表的是本類(lèi),而super代表的是父類(lèi)
因?yàn)閟uper代表的是父類(lèi),那么如果聲明了多個(gè)類(lèi)時(shí),子類(lèi)中如果要訪問(wèn)父類(lèi)的父類(lèi)的成員,難道要使用的是super.super.的方式嗎?

package cn.zhz.Kind;

//爺爺類(lèi)
public class Animal {
    private int age;
    private String sex;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void print() {
        System.out.println("爺爺類(lèi)下的方法");
    }
}
package cn.zhz.Kind;

public class Person extends Animal {
    public String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
package cn.zhz.Kind;

//孫子類(lèi)
public class Student extends Person {
    private String sid;

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    @Override
    public void print() {
        //訪問(wèn)父類(lèi)的父類(lèi)的成員,不可以使用super.super.的方法,可以直接使用super.print();來(lái)進(jìn)行調(diào)用
        super.print();
        System.out.println("這個(gè)是孫子類(lèi)下的方法");
    }
}
package cn.zhz.Instance;

import cn.zhz.Kind.Student;

public class StudentTest {
    public static void main(String[] args) {
        Student student = new Student();
        student.print();
    }
}

Student孫子類(lèi)調(diào)用Animal爺爺類(lèi)時(shí)也是通過(guò)super.成員的方式來(lái)調(diào)用,這是因?yàn)閖ava是只支持單根繼承的,一個(gè)類(lèi)只可以有一個(gè)直接父類(lèi),但是一個(gè)類(lèi)可以有多個(gè)的間接父類(lèi)

三、繼承下的構(gòu)造方法的調(diào)用規(guī)則

package cn.zhz.Kind;

public class Car {
    private int site = 4;
    Car(){
        System.out.println("載客量是"+site+"人");
    }
    public void setSite(int site){
        this.site = site;
    }
    public void print(){
        System.out.println("載客量是"+site+"人");
    }
}
package cn.zhz.Kind;

public class Bus extends Car{
    public Bus(int site){
        setSite(site);
    }
}
package cn.zhz.Instance;

import cn.zhz.Kind.Bus;

public class BusTest {
    public static void main(String[] args) {
        Bus bus = new Bus(20);
        bus.print();
    }
}

子類(lèi)構(gòu)造方法沒(méi)有通過(guò)super顯示調(diào)用父類(lèi)的有參構(gòu)造方法,也沒(méi)有通過(guò)this顯示調(diào)用自身的其他構(gòu)造方法時(shí),系統(tǒng)會(huì)默認(rèn)調(diào)用父類(lèi)的無(wú)參構(gòu)造方法

子類(lèi)構(gòu)造方法通過(guò)super顯示調(diào)用父類(lèi)的有參構(gòu)造方法時(shí),執(zhí)行父類(lèi)相應(yīng)的構(gòu)造方法,而不執(zhí)行父類(lèi)無(wú)參構(gòu)造方法

子類(lèi)構(gòu)造方法通過(guò)this顯示調(diào)用自身的其他構(gòu)造方法,在相應(yīng)構(gòu)造方法中應(yīng)用以上的兩條規(guī)則

四、深入理解方法重寫(xiě)

 方法重寫(xiě)規(guī)則

方法名稱(chēng)相同
參數(shù)列表相同
返回值類(lèi)型相同或者是其子類(lèi)
訪問(wèn)權(quán)限不可以嚴(yán)于父類(lèi)
父類(lèi)的靜態(tài)方法不可以背子類(lèi)覆蓋為非靜態(tài)方法,父類(lèi)的非靜態(tài)方法不可以背子類(lèi)覆蓋為靜態(tài)方法
子類(lèi)可以定義于父類(lèi)同名的靜態(tài)方法,以便在子類(lèi)中隱藏父類(lèi)的靜態(tài)方法(靜態(tài)方法中無(wú)法使用super)
父類(lèi)的私有方法不可以被子類(lèi)覆蓋
不可以跑出比父類(lèi)方法更多的異常

package cn.zhz.Kind;

public class Father {
    public void m1() {
        System.out.println("父類(lèi)的m1的方法");
    }
    //同一個(gè)類(lèi)中同名不同參的是方法重載
    public String m1(int num1){
        return "test";
    }
    //方法返回值類(lèi)型可以是自定義的數(shù)據(jù)類(lèi)型
    public Father m2() {
        System.out.println("父類(lèi)的m2方法");
        return new Father();
    }
    public static void m3(){
        System.out.println("父類(lèi)的靜態(tài)方法m3");
    }
    private void m4(){
        System.out.println("父類(lèi)的私有方法m4");
    }
}
package cn.zhz.Kind;

public class Son extends Father {
    //子類(lèi)重寫(xiě)方法不可以比父類(lèi)方法訪問(wèn)權(quán)限小,可以擴(kuò)大方法的訪問(wèn)權(quán)限
    //子類(lèi)方法只要訪問(wèn)權(quán)限不嚴(yán)于父類(lèi),就構(gòu)成了方法重寫(xiě)
    public void m1() {
        System.out.println("子類(lèi)重寫(xiě)后的m1方法");
    }
    //方法重寫(xiě)是父子類(lèi)的同名同參的
    //子類(lèi)方法返回值類(lèi)型可以是父類(lèi)方法返回值類(lèi)型的子類(lèi),也是方法重寫(xiě)
    public Son m2() {
        System.out.println("子類(lèi)重寫(xiě)后的m2方法");
        return new Son();
    }
    /*
    父類(lèi)的靜態(tài)方法不能被重寫(xiě)為非靜態(tài)方法
    反之,父類(lèi)的非靜態(tài)方法也不可以被重寫(xiě)為靜態(tài)方法
    public void m3(){
        System.out.println("子類(lèi)的非靜態(tài)方法m3");
    }
     */
    //在子類(lèi)中可以定義和父類(lèi)一模一樣的靜態(tài)方法
    public static void m3(){
        //在靜態(tài)方法中不可以使用super
//        super.m3();
        Father.m3();
        System.out.println("子類(lèi)的非靜態(tài)方法m3");
    }
    public static void main(String[] args) {
        Son son = new Son();
        son.m1();
        son.m2();
        Son.m3();
    }
}
比較項(xiàng) 位置 方法名稱(chēng) 參數(shù)列表 返回值 權(quán)限訪問(wèn)修飾符
方法重寫(xiě) 子類(lèi) 相同 相同 相同或是其子類(lèi) 不可以比父類(lèi)更嚴(yán)格
方法重載 同類(lèi) 相同 不相同 無(wú)關(guān) 無(wú)關(guān)

到此這篇關(guān)于Java基礎(chǔ)之方法重寫(xiě)詳解的文章就介紹到這了,更多相關(guān)java方法重寫(xiě)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Java中的final關(guān)鍵字的使用

    詳解Java中的final關(guān)鍵字的使用

    這篇文章主要介紹了詳解Java中的final關(guān)鍵字的使用,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-07-07
  • 實(shí)戰(zhàn)分布式醫(yī)療掛號(hào)系統(tǒng)之整合Swagger2到通用模塊

    實(shí)戰(zhàn)分布式醫(yī)療掛號(hào)系統(tǒng)之整合Swagger2到通用模塊

    這篇文章主要為大家介紹了實(shí)戰(zhàn)分布式醫(yī)療掛號(hào)系統(tǒng)之整合Swagger2到通用模塊,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • Java FTPClient實(shí)現(xiàn)文件上傳下載

    Java FTPClient實(shí)現(xiàn)文件上傳下載

    這篇文章主要為大家詳細(xì)介紹了Java FTPClient實(shí)現(xiàn)文件上傳下載的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • 詳解Java單元測(cè)試之Junit框架使用教程

    詳解Java單元測(cè)試之Junit框架使用教程

    單元測(cè)試就是針對(duì)最小的功能單元編寫(xiě)測(cè)試代碼,Junit是使用Java語(yǔ)言實(shí)現(xiàn)的單元測(cè)試框架,它是開(kāi)源的,Java開(kāi)發(fā)者都應(yīng)當(dāng)學(xué)習(xí)并使用Junit編寫(xiě)單元測(cè)試。本文就來(lái)講講Junit框架的使用教程,需要的可以參考一下
    2022-05-05
  • Netty粘包問(wèn)題的常見(jiàn)解決方案

    Netty粘包問(wèn)題的常見(jiàn)解決方案

    粘包和拆包問(wèn)題也叫做粘包和半包問(wèn)題,它是指在數(shù)據(jù)傳輸時(shí),接收方未能正常讀取到一條完整數(shù)據(jù)的情況(只讀取了部分?jǐn)?shù)據(jù),或多讀取到了另一條數(shù)據(jù)的情況)就叫做粘包或拆包問(wèn)題,本文介紹了Netty如何解決粘包問(wèn)題,需要的朋友可以參考下
    2024-06-06
  • Mybatis 一級(jí)緩存與二級(jí)緩存的實(shí)現(xiàn)

    Mybatis 一級(jí)緩存與二級(jí)緩存的實(shí)現(xiàn)

    mybatis作為一個(gè)流行的持久化工具,緩存必然是缺少不了的組件。通過(guò)這篇文章,就讓我們來(lái)了解一下一級(jí)緩存與二級(jí)緩存的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • SpringBoot整合mybatis-plus進(jìn)階詳細(xì)教程

    SpringBoot整合mybatis-plus進(jìn)階詳細(xì)教程

    本文主要對(duì)mybatis-plus的條件構(gòu)造器、AR模式、插件、逆向工程、自定義全局操作、公共字段自動(dòng)填充等知識(shí)點(diǎn)進(jìn)行講解,需要的朋友參考下吧
    2021-09-09
  • 使用Java編寫(xiě)控制JDBC連接、執(zhí)行及關(guān)閉的工具類(lèi)

    使用Java編寫(xiě)控制JDBC連接、執(zhí)行及關(guān)閉的工具類(lèi)

    這篇文章主要介紹了如何使用Java來(lái)編寫(xiě)控制JDBC連接、執(zhí)行及關(guān)閉的程序,包括一個(gè)針對(duì)各種數(shù)據(jù)庫(kù)通用的釋放資源的工具類(lèi)的寫(xiě)法,需要的朋友可以參考下
    2016-03-03
  • SpringBoot對(duì)接小程序微信支付的實(shí)現(xiàn)

    SpringBoot對(duì)接小程序微信支付的實(shí)現(xiàn)

    本文主要介紹了SpringBoot對(duì)接小程序微信支付的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2023-09-09
  • SpringMVC異常處理知識(shí)點(diǎn)總結(jié)

    SpringMVC異常處理知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于SpringMVC異常處理相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2019-10-10

最新評(píng)論