super的使用
创始人
2024-03-05 10:47:17

49.super的使用

子类访问父类成员

  • 访问父类方法:例:super.print();

super可以调用父类的非private方法

  • 访问父类属性:例:super.name;

super不可以调用父类的private属性

super可以调用父类的非private属性

  • 访问父类构造方法:例1:super();   例2:super(name);

通过super调用父类的构造方法

super();注意参数顺序必须和父类一致

50.super总结

super关键字来访问父类的成员

  • 使用super关键字,super代表父类对象
  • super只能出现在子类的方法和构造方法中
  • super调用构造方法时,只能是第一句
  • super不能访问父类的private成员

51.super的使用场景

  • 子类方法重写父类方法
  • 在子类中定义了和父类同名的成员变量

子类会覆盖父类的同名成员

可使用super调用父类被子类覆盖的同名成员(super可以是被屏蔽的成员可见)

//父类,提取共性代码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;
//        }
    }
}

/*
* 宠物企鹅类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);
    }

}

/*
* 宠物狗狗类Pet类
* */

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,String strain){
        //通过super调用父类的构造方法,必须是第一行
        //super();注意参数顺序必须和父类一致
        super(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);
    }
}

//宠物测试类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;
        }
    }
}

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...