继承下的构造方法
admin
2024-03-06 01:10:54
0

 52.继承下的构造方法

继承条件下构造方法的调用规则

  • 子类构造方法没有通过super显示调用父类的有参构造方法,也通过this.显示调用自身其他构造方法

系统默认调用父类的无参构造方法

  • 子类构造方法通过super显示调用父类的有参构造方法

执行父类相应构造方法,而不执行父类无参构造方法

  • 子类构造方法通过this显示调用自身的其他构造方法,在相应构造方法中应用以上两条规则

//父类,提取共性代码Pet类

public class Pet {
    //1.隐藏属性(添加private)
    //昵称,默认值是“无名氏”
    private String name="无名氏";

    //1.health属性不被用户访问到 2.程序编写过程中要能控制health的赋值--方法中
    /*if(this.health<0||this.health>100){
        System.out.println("请输入0-100的值!");
        this.health=60;
    }else{
        this.health=health;
    }*/
    //健康值,默认值是100,健康值在0-100之间,小于60为不健康
    private int health=100;
    //亲密度
    private int love=0;
    int age=5;


    public Pet(){
        System.out.println("父类无参构造方法");
    }
    public Pet(String name){
        this.name=name;
    }
    public Pet(String name,int health,int love){
        //this(name);  //this可调用本类的构造方法,且必须在第一行
        this.name=name;
        this.health=health;
        this.love=love;
        System.out.println("父类的带参构造方法");
    }

    public int getAge() {
        return age;
    }

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

    //2.添加属性的setter/getter方法(方法公开),并加入属性控制语句
    //setter:1.属性赋值。2.属性的操作(正确判断等)
    public void setHealth(int health){
        if(health<0||health>100){
            System.out.println("请输入0-100的值!");
            this.health=60;
            return;
        }
        this.health=health;
    }
    //getter:属性取值
    public int getHealth(){
        return this.health;
    }

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

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

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

    public void setLove(int love) {
        if(love<0||love>100){
            System.out.println("请输入0-100的值!");
            this.love=60;
            return;
        }
        this.love=love;
    }

     /**
      * 输出宠物的信息
     * */
    public void print(){
        System.out.println("宠物的自白:\n我的名字叫"+this.name+",健康值为"+this.health+
                ",和主人的亲密度为"+this.love+"。");
//        if(this.health<0||this.health>100){
//            System.out.println("请输入0-100的值!");
//            this.health=60;
//        }else{
//            this.health=health;
//        }
    }
}

/*
* 宠物狗狗类Dog类
* */

import java.sql.SQLOutput;

/*
* 宠物狗狗类
* */
public class Dog extends Pet{

    //品种
    private String strain="聪明的拉布拉多犬";
    private int age=3;
    
    public Dog(){
        System.out.println("子类狗狗的无参构造方法");
    }
    public Dog(String name,int health,int love){
        super(name,health,love);
        System.out.println("子类狗狗带三个参数的构造方法");
    }
    public Dog(String name,int health,int love,String strain){
        /*//通过super调用父类的构造方法,必须是第一行
        //super();注意参数顺序必须和父类一致
        super(name,health,love);*/
        this(name,health,love);
        this.strain=strain;
        System.out.println("子类狗狗的带四个参数的构造方法");
    }


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

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

    public void print(){
        //调用父类的非private方法print()
        super.print();
        System.out.println(",我是一只:"+this.strain);
    }

    public void m1(){
        /*//super不可以调用父类的private属性
        System.out.println(super.name);*/
        //super可以调用父类的非private属性
        System.out.println(super.age);
    }

    public void m2(){
        //子类会覆盖父类的同名成员
        System.out.println(this.age);
        //可使用super调用父类被子类覆盖的同名成员
        System.out.println(super.age);
    }
}

/*
* 宠物企鹅类Penguin类
* */

public class Penguin extends Pet {

    //性别
    private String sex="Q仔";

    public String getSex() {
        return this.sex;
    }

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

    public void print(){
        //调用父类的print()
        super.print();
        System.out.println(",我的性别是:"+this.sex);
    }
}

//宠物测试类TestPet类

import java.util.Scanner;

//宠物测试类
public class TestPet {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        System.out.println("欢迎来到宠物店!");
        System.out.println("请输入您要领养宠物的名字:");
        String name = input.next();
        System.out.println("请输入您要领养的宠物类型:1.狗狗 2.企鹅");
        int typeNo = input.nextInt();
        switch (typeNo) {
            case 1:
                //接受用户键盘输入值
                System.out.println("请输入宠物的健康值:");
                int ghealth = input.nextInt();
                System.out.println("请输入宠物与主人的亲密度:");
                int glove = input.nextInt();
                System.out.println("请输入宠物的品种:");
                String strain = input.next();

                /*//创建狗狗对象,并为狗狗属性赋值
                Dog dog = new Dog();
                dog.setName(name);
                //dog.health=-1000;
                dog.setHealth(ghealth);
                //System.out.println(dog.getHealth());
            */
              /*  //伪代码
            do{
                dog.health=-1000;
                System.out.println("请输入0-100之间的数值!");
            }while(dog.health>0||dog.health<100);
            dog.love=3;
            dog.name="多多";
            dog.strain="吉娃娃";
                dog.setLove(glove);
                dog.setStrain(strain);
                dog.print();
                //dog.m1();*/
                Dog dog=new Dog("狗蛋",244,23,"二哈");
                dog.print();
                dog.m2();
                break;
            case 2:
                //接受用户键盘录入值
                System.out.println("请选择宠物的性别:1.Q妹 2.Q仔");
                int sexId = input.nextInt();
                String sex = (sexId == 1) ? "Q妹" : "Q仔";
                System.out.println("请输入宠物的健康值:");
                int qhealth = input.nextInt();
                System.out.println("请输入宠物和主人的亲密度:");
                int qlove = input.nextInt();

                //创建企鹅对象,并为企鹅属性赋值
                Penguin p = new Penguin();
            /*p.health=-1000;
            p.love=3;
            p.name="Q仔";
            p.sex="男";*/
                p.setName(name);
                p.setHealth(qhealth);
                p.setLove(qlove);
                p.setSex(sex);
                p.print();
                break;
            default:
                System.out.println("暂时没有这个类型的宠物,请在1或者2之间选择数值输入!");
                break;
        }
    }
}

相关内容

热门资讯

携手构建公正合理的全球人工智能... 新华社北京7月21日电 题:倡导和衷共济 完善全球治理——携手构建公正合理的全球人工智能治理体系述评...
季军战逆袭:姆巴佩如何打破纪录... 在2026年美加墨世界杯的季军争夺战中,法国和英格兰以4-6的比分交锋,这场比赛的结果让人意想不到!...
跨越2800公里的暖心探望 汉... 极目新闻通讯员 祝小艳 罗晓忆 孙梦林 七月仲夏,汉江师范学院历史文化与旅游学院学工团队携“石榴花开...
德防长支持车企造武器 “转向”... 新华社北京7月22日电 德国国防部长鲍里斯·皮斯托里乌斯21日说,在德国汽车产业面临压力背景下,他支...
一线观察|胡塞“封锁”沙特 “... 也门胡塞武装日前发出警告,与沙特港口开展贸易往来的船只可能成为其“打击目标”。此举进一步扩大了胡塞武...
特朗普:伊朗袭船就炸其桥梁或电... 新华社华盛顿7月22日电 美国总统特朗普22日称,从现在起,伊朗每次在霍尔木兹海峡向船只开火,美国就...
一箭9星,全球运力最大固体运载... 7月22日10时54分,引力一号(遥四)·星联体号运载火箭在我国东海海域点火升空,将9颗卫星送入预定...
演员黄晓明1亿投中长鑫科技浮盈... 据消息,7月22日,有网传消息称,“演员黄晓明在长鑫科技估值约200亿元时投入约1亿元,若按照上市后...
借钱变诈骗?江西王吉成律师教你... 在日常生活中,亲戚朋友间的资金拆借十分常见。很多人认为“借钱不还”顶多是民事纠纷,属于“老赖”行为。...
学史防毒守底线 法社联动护平安 为扎实开展常态化禁毒预防教育,拓宽禁毒宣传覆盖面,进一步提升政法公职人员防毒拒毒意识,筑牢司法队伍禁...