Java中多态、重写方法、instanceof运算符、重写equals的相关案例

一、代码及效果图

1.重写

案例:使用方法重写优化电子宠物系统

代码如下(示例):

package test1;

public class Dog extends Pet{
    private String type;

    public Dog(String name, int health, int cute, String type) {
        super(name, health, cute);
        this.type = type;
    }

    @Override
    public void show() {
        super.show();
        System.out.println("我是一只:"+type);
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

package test1;

public class Penguin extends Pet{
    private String sex;

    public Penguin(String name, int health, int cute, String sex) {
        super(name, health, cute);
        this.sex = sex;
    }

    @Override
    public void show() {
        super.show();
        System.out.println("我的性别是:"+sex);
    }

    public String getSex() {
        return sex;
    }

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

package test1;

public class Pet {
    private String name;
    private int health;
    private int cute;

    public Pet(String name, int health, int cute) {
        this.name = name;
        this.health = health;
        this.cute = cute;
    }



    public void show(){
        System.out.println("宠物的自白:");
        System.out.println("我的名字:"+name+"\t"+"我的健康值为" +
                health+"\t"+"我和主人的亲密度是"+cute);
    }



    public String getName() {
        return name;
    }

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

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }

    public int getCute() {
        return cute;
    }

    public void setCute(int cute) {
        this.cute = cute;
    }
}

package test1;

public class Test {
    public static void main(String[] args) {
        fun(new Dog("欧欧",100,0,"雪纳瑞犬"));
        fun(new Penguin("楠楠",100,0,"Q妹"));
    }
    private static void fun(Pet pet) {
            pet.show();
    }
}

在这里插入图片描述

2.重写equals

案例:重写比较规则,判断两名学员(Student)是否为同一对象
Student相关属性
Id(学号)、name(姓名)、age(年龄)
如果两名学员的学号以及姓名相同,则为同一对象
代码如下(示例):

package test2;

public class Student {
    private String name;
    private int id;
    private int age;

    public Student(String name, int id, int age) {
        this.name = name;
        this.id = id;
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Student){
            Student s= (Student) obj;
            return this.name==s.name && this.id==s.id;
        }else {
            return false;
        }
    }

    public String getName() {
        return name;
    }

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

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

package test2;

public class TestStu {
    public static void main(String[] args) {
        Student stu1= new Student("张三",123,22);
        Student stu2= new Student("张三",123,26);
        System.out.println(stu1.equals(stu2));
    }
}

在这里插入图片描述

3.多态

案例:使用多态实现为宠物喂食
宠物饿了,主人需要为宠物喂食,使用多态实现该过程
不同宠物吃的东西不一样
不同宠物吃完东西后恢复健康值不一样
健康值达到100时,不需要继续喂食
代码如下(示例):

package test3;

public class Dog extends Pet{
    public Dog(int health) {
        super(health);
    }

    @Override
    public void eat(String food) {
        System.out.println("狗狗吃"+food+",健康值增加3");
        setHealth(getHealth()+3);
    }
}

package test3;

public class Master {
    public void feed(Pet pet,String food){
        pet.eat(food);
    }
}

package test3;

public class Penguin extends Pet{
    public Penguin(int health) {
        super(health);
    }

    @Override
    public void eat(String food) {
        System.out.println("企鹅吃"+food+",健康值增加5");
        setHealth(getHealth()+5);
    }
}

data = pd.read_csv(

package test3;

public class Pet {
    private int health;

    public Pet(int health) {
        this.health = health;
    }

    public void eat(String food){
        System.out.println("宠物吃"+food);
    }
    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
        if (health>=100){
            this.health=100;
            System.out.println("已经吃饱了");
        }
    }
}

package test3;

public class Test {
    public static void main(String[] args) {
        Master m=new Master();
        Dog dog=new Dog(60);
        m.feed(dog,"大骨头");
        System.out.println(dog.getHealth());

        Penguin p=new Penguin(50);
        m.feed(p,"鱼");
        System.out.println(p.getHealth());


    }
}

在这里插入图片描述

4.instanceof运算符

案例:使用多态实现主人领养宠物并与宠物玩耍功能
狗具有特有的接飞盘方法,企鹅具有特有的南极游泳方法。请编写测试类分别调用各种具体宠物的特有方法
使用向下转型
使用instanceof判断宠物类型

代码如下(示例):

package test4;

public class Dog extends Pet{
    public Dog(int health) {
        super(health);
    }


    public void fly(){
        System.out.println("狗狗接飞盘");
    }

    @Override
    public void eat(String food) {
        System.out.println("狗狗吃"+food+",将康值增加3");
        setHealth(getHealth()+3);
    }
}

package test4;

public class Master {
    public void feed(Pet pet,String food){
        pet.eat(food);
    }
    public void play(Pet pet){
        if (pet instanceof Dog){
            Dog dog= (Dog) pet;
            dog.fly();
        }else if (pet instanceof Penguin){
            Penguin p= (Penguin) pet;
            p.swim();
        }
    }
    public Pet adopt(String name){
        if (name.equals("狗狗")){
            return new Dog(60);
        }else if (name.equals("企鹅")){
            return new Penguin(50);
        }else {
            return null;
        }
    }
    public Pet donate(String name){
        if (name.equals("狗狗")){
            return new Dog(60);
        }else if (name.equals("企鹅")){
            return new Penguin(60);
        }else {
            return null;
        }
    }
}

package test4;

public class Penguin extends Pet{
    public Penguin(int health) {
        super(health);
    }

    public void swim(){
        System.out.println("企鹅在游泳");
    }
    @Override
    public void eat(String food) {
        System.out.println("企鹅吃"+food+",将康值增加5");
        setHealth(getHealth()+5);
    }
}

package test4;

public class Pet {
    private int health;

    public Pet() {
    }

    public Pet(int health) {
        this.health = health;
    }
    public void eat(String food){
        System.out.println("宠物吃"+food);
    }

    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
        if (health>100){
            this.health=100;
            System.out.println("吃饱了,再也吃不下了");
        }
    }
}

package test4;

public class Test {
    public static void main(String[] args) {
        Master m=new Master();
       Pet p = m.adopt("狗狗");
        m.feed(p,"大骨头");
        m.play(p);
        System.out.println(p.getHealth());
        Pet a=m.donate("狗狗");
        System.out.println("你捐献的是:"+a.getClass().getName());
    }
}

总结

以上就是多态相关案例的内容,主要是利用了继承、重写以及多态等相关的技术来实现的。


版权声明:本文为StruggleBamboo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。