国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java從零開始學(xué)十五(繼承)

2019-11-14 23:02:26
字體:
供稿:網(wǎng)友
java從零開始學(xué)十五(繼承)一、繼承作用

繼承使用復(fù)用以前的代碼非常容易,能夠大大的縮短開發(fā)周期,降低開發(fā)成本,同時增加程序的易維護(hù)性

繼承使重一個類A能夠直接使用另外一個類B的屬性和方法的一種途徑

類A可以有自己的屬性和方法

二、繼承實現(xiàn)類的繼承格式在Java中使用extends關(guān)鍵字完成類的繼承關(guān)系,操作格式:class 父類{} // 定義父類class 子類 extends 父類{} // 使用extends關(guān)鍵字實現(xiàn)繼承
package com.pb.person;/* * 父類 */public class Person {    PRivate String name; //姓名    private String sex;    //性別    private int age;//年齡    //設(shè)置getter和setter方法    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        if(sex.equals("男") || sex.equals("女")){            //設(shè)置性別限制,不合法的值將提示錯誤        this.sex = sex;        }else{            System.out.println("性別不合法,性別只能是:男或者女");        }    }    public int getAge() {        return age;    }    public void setAge(int age) {        if(age>0 && age<=150){            //設(shè)置年齡限制        this.age = age;        }else{            System.out.println("年齡只能在1-150歲之間");        }    }    public Person() {        this.name = "無名氏";        this.sex = "男";        this.age = 22;    }    public Person(String name, String sex, int age) {        this.name = name;        this.sex = sex;        this.age = age;    }        public void say(){        System.out.println("自我介紹:");        System.out.println("姓名:"+this.name);        System.out.println("性別:"+this.sex);        System.out.println("年齡:"+this.age);    }}

子類:

package com.pb.person;/* * 子類 */public class Student extends Person {    private int stuNo ;   //學(xué)號    private String specialty;   //專業(yè)        public Student() {    }    public Student(String name, String sex, int age,int stuNo,String specialty) {        super(name, sex, age);        this.stuNo=stuNo;        this.specialty=specialty;    }            //getter/setter方法    public int getStuNo() {        return stuNo;    }    public void setStuNo(int stuNo) {        this.stuNo = stuNo;    }    public String getSpecialty() {        return specialty;    }    public void setSpecialty(String specialty) {        this.specialty = specialty;    }            }

測試類

package com.pb.persontest;import com.pb.person.Student;public class Test {    public static void main(String[] args) {        Student stu=new Student("張三", "男", 22, 121, "計算機科學(xué)與技術(shù)") ;        stu.say();    }}

結(jié)果:

自我介紹:姓名:張三性別:男年齡:22

以下可以發(fā)現(xiàn),子類的學(xué)號,和專業(yè)并沒有輸出,

默認(rèn)調(diào)用的父類的say()方法

需要子類重寫父類的方法

三、方法的重寫

方法的重寫是發(fā)生的子類對父類的過程中,是在2個類中,和方法重載是在一個類中

方法重寫有以下要求

Student類重寫Person類中的say()方法

package com.pb.person;/* * 子類 */public class Student extends Person {    private int stuNo ;   //學(xué)號    private String specialty;   //專業(yè)        public Student() {    }    public Student(String name, String sex, int age,int stuNo,String specialty) {        super(name, sex, age);        this.stuNo=stuNo;        this.specialty=specialty;    }    //方法重寫    @Override    public void say() {            super.say();        System.out.println("學(xué)號是:"+this.stuNo);        System.out.println("專業(yè)是:"+this.specialty);    }        //getter/setter方法    public int getStuNo() {        return stuNo;    }    public void setStuNo(int stuNo) {        this.stuNo = stuNo;    }    public String getSpecialty() {        return specialty;    }    public void setSpecialty(String specialty) {        this.specialty = specialty;    }            }

測試類不變:

package com.pb.persontest;import com.pb.person.Student;public class Test {    public static void main(String[] args) {        Student stu=new Student("張三", "男", 22, 121, "計算機科學(xué)與技術(shù)") ;        stu.say();    }}

結(jié)果:

自我介紹:姓名:張三性別:男年齡:22學(xué)號是:121專業(yè)是:計算機科學(xué)與技術(shù)

重寫以后,調(diào)用的就是子類重寫后的方法

四、super關(guān)鍵字

super必須是出現(xiàn)在子類中(子類的方法和構(gòu)造方法中),而不是其他位置,在構(gòu)造方法中必須出現(xiàn)在第一行

用以訪問父類的成員,例如:父類的屬性、方法、構(gòu)造方法

訪問權(quán)限的限制,例如無法通過super訪問private成員

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

規(guī)則一:如果子類的構(gòu)造方法中沒有通過super顯示調(diào)用父類的有參構(gòu)造方法,也沒有通過this顯式調(diào)用自身的其他構(gòu)造方法,則系統(tǒng)會默認(rèn)先調(diào)用父類的無參構(gòu)造方法

規(guī)則二:如果子類的構(gòu)造方法中通過super顯示調(diào)用父類的有參構(gòu)造方法,那將執(zhí)行父類的相應(yīng)的構(gòu)造方法,而不執(zhí)行父類無參數(shù)構(gòu)造方法

規(guī)則三:如果子類的構(gòu)造方法中通過this顯式調(diào)用自身的其他構(gòu)造方法,在相應(yīng)構(gòu)造方法中應(yīng)用以上2條規(guī)則

5.1、例一
package compb.demo4;/* * 父類 */public class StaticSuper {    public static String staticGet() {        return "父類靜態(tài)方法";    }    public String dynamicGet() {        return "父類動態(tài)方法";    }}package compb.demo4;/* * 子類 */public class StaticSub  extends StaticSuper{        //靜態(tài)方法不能重寫    public static String staticGet() {        return "子類靜態(tài)方法";    }    @Override    public String dynamicGet() {        return "子類動態(tài)方法重寫父類動態(tài)方法";    }}package compb.demo4;/* * 測試 */public class Test {    public static void main(String[] args) {        StaticSub s= new StaticSub();  //聲明子類對象    System.out.println(s.staticGet());   //調(diào)用子類靜態(tài)方法        System.out.println(s.dynamicGet());  //調(diào)用子類動態(tài)方法    }}

結(jié)果:

子類靜態(tài)方法子類動態(tài)方法重寫父類動態(tài)方法

5.2、例二、
package com.pb.demo5;/* * 父類 */public class VenderLate {    public VenderLate() {        System.out.print("VenderLate out");    }    }package com.pb.demo5;public class MoveGoods  extends VenderLate{    public MoveGoods( ) {        System.out.println("MoveGoods out!");        }        public MoveGoods(String s) {    System.out.println(s);    }        }package com.pb.demo5;/* * 測試類 */public class Test {    public static void main(String[] args) {        MoveGoods m=new MoveGoods();        MoveGoods g=new MoveGoods("   child");            }}

結(jié)果:

VenderLate outMoveGoods out!VenderLate out child

5.3 、例三
package com.pb.demo4;/* * 父類 */public class SuperClass {    private String name;    public SuperClass() {    System.out.println("父類的無參數(shù)構(gòu)造方法");    }    public SuperClass(String name) {        System.out.println("父類有一個參數(shù)的構(gòu)造方法:"+name);        }    //setter/getter方法    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    }

子類

package com.pb.demo4;public class SubClass extends SuperClass { private String name; private int count;     public SubClass() {        System.out.println("子類無參數(shù)構(gòu)造方法");    }    public SubClass(int count) {        System.out.println("子類有一個參數(shù)構(gòu)造方法:"+count);    }        //調(diào)用父類有參數(shù)的構(gòu)造方法    public SubClass(String name) {        super(name);        this.name=name;        System.out.println("調(diào)用子類有一個參數(shù)構(gòu)造方法,同時使用super顯示調(diào)用"+name);    }//setter/getter方法    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getCount() {        return count;    }    public void setCount(int count) {        this.count = count;    }}

測試類:

package com.pb.demo4;public class Test {    public static void main(String[] args) {        System.out.println("*******調(diào)用子類無參數(shù)構(gòu)造方法**********");        SubClass s1=new SubClass();        System.out.println("*******調(diào)用子類有一個參數(shù)構(gòu)造方法但是沒有使用super顯示調(diào)用**********");        SubClass s2=new SubClass(34);        System.out.println("*******調(diào)用子類有一個參數(shù)構(gòu)造方法,同時使用super顯示調(diào)用**********");        SubClass s3=new SubClass("張三");    }}

結(jié)果:

*******調(diào)用子類無參數(shù)構(gòu)造方法**********父類的無參數(shù)構(gòu)造方法子類無參數(shù)構(gòu)造方法*******調(diào)用子類有一個參數(shù)構(gòu)造方法但是沒有使用super顯示調(diào)用**********父類的無參數(shù)構(gòu)造方法子類有一個參數(shù)構(gòu)造方法:34*******調(diào)用子類有一個參數(shù)構(gòu)造方法,同時使用super顯示調(diào)用**********父類有一個參數(shù)的構(gòu)造方法:張三調(diào)用子類有一個參數(shù)構(gòu)造方法,同時使用super顯示調(diào)用張三
六、Object類

所有的有類都自動繼承java.lang包中的Object類

Object類是所有類的父類(基類)

在定義一個類時如果沒有使用extends關(guān)鍵字,則默認(rèn)繼承Object類

Object常被重寫的方法:


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁波市| 伊川县| 永平县| 山西省| 鄂伦春自治旗| 平远县| 临武县| 南岸区| 淮滨县| 广汉市| 鲜城| 阿图什市| 类乌齐县| 綦江县| 滦南县| 绥德县| 上饶县| 昌宁县| 揭东县| 宜州市| 黄龙县| 吐鲁番市| 南漳县| 崇信县| 伊宁市| 鄂伦春自治旗| 赤峰市| 锡林郭勒盟| 右玉县| 镇巴县| 邹平县| 徐汇区| 秦安县| 华安县| 武威市| 辽阳市| 平阴县| 荣成市| 旌德县| 木兰县| 孝义市|