练习:继承和多态

       本项目是黑马P132继承与多态练习,独立完成。Java的三大特性是封装、继承和多态。

练习题目: 

1.定义狗类

属性:年龄、颜色

行为:eat(String something)(something表示吃的东西)

           看家lookHome方法(无参数)

2.定义猫类

属性:年龄、颜色

行为:eat(String something)(something表示吃的东西)

           抓老鼠catchMouse方法(无参数)

3.定义Person类//饲养员

属性:姓名、年龄

行为:keepPet(Dog dog,String something)方法

           keepPet(Cat cat,String something)方法

           生成有参空参构造,set和get方法

4.定义测试类(完成以下打印效果):

           keepPet(Dog dog,String something)打印如下内容:

                年龄为30岁的老王养了一只黑颜色的2岁的狗

                2岁的黑颜色的狗两只前腿死死的抱住骨头猛吃

           keepPet(Cat cat,String something)打印如下内容:

                年龄为25岁的老李养了一只灰颜色的3岁的猫

                3岁的灰颜色的猫眯着眼睛侧着头吃鱼

        先提取共性内容形成父类Animal,Animal中包含两个私有变量年龄和颜色,设置无参和有参的构造方法,set和get方法以及eat方法。 

package demo03;

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

    public Animal() {
    }

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

    public int getAge() {
        return age;
    }

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

    public String getColor() {
        return color;
    }

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

    //方法
    public void eat(String something){
        System.out.println("吃的东西是" + something);
    }
}

        然后是猫类和狗类的实现。猫和狗通过extends Animal进行对Animal类的继承。在有参构造函数中,使用super(age,color)方法,即可在本类和别的类中通过get方法获得父类中的私有变量。使用@Override,重写eat()方法。由于子类可以直接调用父类中的public函数,所以可以直接通过getAge()方法和getColor()方法获得对应的内容。

package demo03;

public class Dog extends Animal{
     public Dog(int age,String color){
         super(age, color);
     }

    public Dog() {
    }

    @Override
    public void eat(String something){
         System.out.println(getAge() + "岁的" + getColor() + "颜色的狗两只前腿死死的抱住" + something + "猛吃");
     }

     public void lookHome(){
         System.out.println("狗看家");
     }
}
package demo03;

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

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

    @Override
    public void eat(String something){
        System.out.println(getAge() + "岁的" + getColor() + "颜色的猫眯着眼睛侧着头吃" + something);
    }

    public void catchMouse(){
        System.out.println("猫在抓老鼠");
    }
}

        然后是Person类的实现。完成构造函数、get/set方法后,定义KeepPet方法,这里利用多态,将形参的第一项定义为Animal a,在测试类调用时,就可以将new Dog()或new Cat()作为实参传入。通过a instanceof Dog和a instanceof Cat方法,判断传入的参数是Dog类还是Cat类的对象。如果采用的是重写的方法,直接通过a.调用即可。如果是子类特有的方法,需要强制转换成子类的对象。由于是向下转换,需要强制转换,例如:Dog d = (Dog)a;然后就可以调用d.lookHome()方法。

    public void KeepPet(Animal a,String something){
        //a = new Dog(2,"黑颜色");
        if(a instanceof Dog){
            System.out.println("年龄为" + age + "岁的" + name + "养了一只" + a.getColor() + "颜色的" + a.getAge() + "岁的狗");
            //Dog d = (Dog)a;
            a.eat(something);
        }
        else if(a instanceof Cat){
            System.out.println("年龄为" + age + "岁的" + name + "养了一只" + a.getColor() + "颜色的" + a.getAge() + "岁的猫");
            a.eat(something);
        }

    }

        最后是测试类:

package demo03;

public class Test {
    public static void main(String[] args) {
        Person p1 = new Person("老王",30);
        Person p2 = new Person("老李",25);
        p1.KeepPet(new Dog(2,"黑"),"骨头");
        p2.KeepPet(new Cat(3,"灰"),"鱼");
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值