Java练习

这个练习我用到了继承,多态和封装。

1.继承

Animal 类是一个抽象类,它有两个子类 Dog 和 Cat。
Dog 和 Cat 分别继承自 Animal 类,因此它们可以使用 Animal 类中定义的属性和方法,同时也可以有自己特有的属性和方法。

2.多态

在 Person 类的 keepPet 方法中,通过 instanceof 关键字判断传入的动物对象是 Dog 还是 Cat 类型,然后进行相应的操作。这就是多态 的体现,即相同的方法调用可以根据不同对象的实际类型执行不同的操作

3.封装

Animal 类中的 color 和 age 属性被设置为私有(private),只能通过公共的 getter 和 setter 方法访问和修改。

java 复制代码
package com.animal.java;

public abstract class Animal {
    private String color;
    private int age;

    public Animal() {
    }

    public Animal(String color, int age) {
        this.color = color;
        this.age = age;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public abstract void eat(String str);

}
java 复制代码
package com.animal.java;

public class Dog extends Animal{
    public Dog() {
    }

    public Dog(String color, int age) {
        super(color, age);
    }
    public void lookHouse(){
        System.out.println("小狗正在看家");
    }
    @Override
    public void eat(String str) {
        System.out.println(getAge() + "岁的" + getColor() + "小狗正在猛吃" + str);
    }
}
java 复制代码
package com.animal.java;

public class Cat extends Animal{
    public Cat() {
    }

    public Cat(String color, int age) {
        super(color, age);
    }

    public void catchMouse(){
        System.out.println( getColor() +"的猫正在抓小老鼠");
    }

    @Override
    public void eat(String str) {
        System.out.println(getAge() + "岁的" + getColor() + "小猫正在吃" + str);
    }

}
java 复制代码
package com.animal.java;

public class Person {
    private String name;
    private int age;

    public Person() {
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    
    /**饲养狗
    public void keepPet(Dog dog,String str){
        System.out.println("年龄为" + this.age + "岁的" + this.name + "养了一只年龄为" +dog.getAge() +"岁的" + dog.getColor() +"小狗");
        dog.eat(str);
    }
     饲养猫
    public void keepPet(Cat cat,String str){
        System.out.print("年龄为" + this.age + "岁的" + this.name + "养了一只年龄为" +cat.getAge() +"岁的" + cat.getColor() +"小猫");
        cat.catchMouse();
    }
    */

    public void keepPet(Animal animal,String str) {
        if(animal instanceof Dog){
            Dog dog = (Dog) animal;
            System.out.println("年龄为" + this.age + "岁的" + this.name + "养了一只年龄为" +dog.getAge() +"岁的" + dog.getColor() +"小狗");
            dog.eat(str);
        }
        else if(animal instanceof Cat){
            Cat cat = (Cat) animal;
            System.out.println("年龄为" + this.age + "岁的" + this.name + "养了一只年龄为" +cat.getAge() +"岁的" + cat.getColor() +"小猫");
            cat.eat(str);
        }
        else {
            System.out.println("没有这种动物");
        }
    }
}
java 复制代码
package com.animal;

import com.animal.java.Animal;
import com.animal.java.Cat;
import com.animal.java.Dog;
import com.animal.java.Person;

public class Test {
    public static void main(String[] args) {
        Person person1 = new Person("老王",30);
        Animal dog = new Dog("黑色",2);
        person1.keepPet(dog,"骨头");
        Dog dog1 = new Dog("橘色",4);
        System.out.print(dog1.getAge() + "岁的" + dog1.getColor());
        dog1.lookHouse();


        Person person2 = new Person("老李",25);
        Cat cat = new Cat("灰色",3);
        person2.keepPet(cat,"小鱼干");
        cat.catchMouse();

    }
}

结果展示

相关推荐
pianmian11 小时前
类(JavaBean类)和对象
java
我叫小白菜2 小时前
【Java_EE】单例模式、阻塞队列、线程池、定时器
java·开发语言
Albert Edison2 小时前
【最新版】IntelliJ IDEA 2025 创建 SpringBoot 项目
java·spring boot·intellij-idea
超级小忍3 小时前
JVM 中的垃圾回收算法及垃圾回收器详解
java·jvm
weixin_446122463 小时前
JAVA内存区域划分
java·开发语言·redis
勤奋的小王同学~3 小时前
(javaEE初阶)计算机是如何组成的:CPU基本工作流程 CPU介绍 CPU执行指令的流程 寄存器 程序 进程 进程控制块 线程 线程的执行
java·java-ee
TT哇3 小时前
JavaEE==网站开发
java·redis·java-ee
2401_826097623 小时前
JavaEE-Linux环境部署
java·linux·java-ee
缘来是庄4 小时前
设计模式之访问者模式
java·设计模式·访问者模式
Bug退退退1234 小时前
RabbitMQ 高级特性之死信队列
java·分布式·spring·rabbitmq