2019-1-21作业

作业一:使用多态实现主人领养宠物,和宠物玩的功能,

父类,宠物类:

package com.polym02;

/**
 * 父类 ,宠物类
 */
public abstract class Pet {
   //宠物被领养的方法
    public  Pet yang(Pet pet){
        return pet;
    }
}

子类狗:

package com.polym02;

/**
 * 狗狗类
 */
public class Dog extends Pet {
    //玩的方法
    public void wang() {
        System.out.println("陪狗狗去接飞盘");
    }
   //重写父类被领养的方法
    public  Pet yang(Pet pet){
        System.out.println("给你一只狗狗");
        return pet;
    }
}

子类企鹅:

package com.polym02;

/**
 * 企鹅类
 */
public class Penguin extends Pet {
    //玩的方法
    public  void  wang(){
        System.out.println("带企鹅去游泳。。。。。。");
    }
    //重写父类被领养的方法
    public  Pet yang(Pet pet){
        System.out.println("给你一只企鹅。。。。。");
        return pet;
    }
}

主人类:

package com.polym02;

/**
 * 主人类
 */
public class Master {//带宠物出去玩的方法
    public  void  quWang(Pet pet){
       if(pet instanceof Dog){
           Dog dog = (Dog)pet
           dog.wang();
       }else if (pet instanceof Penguin){
         Penguin pen =(Penguin)pet
           pen.wang();
       }
    }
    //领养宠物的方法
    public Pet lingYang(Pet pet) {
        Pet p = null;
        if (pet instanceof Dog) {
          
            pet.yang(p1);
            p = pet;
        }else if(pet instanceof  Penguin){
           pet.yang(p2);
            p =pet;
        }
        return p;
    }
}

测试类:

package com.polym02;

import java.util.Scanner;

public class Test {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        Master m = new Master();
        Pet P1 = new Dog();
        Pet P2 = new Penguin();
        System.out.println("请输入要陪玩的宠物:1,狗狗   2,企鹅");
        int choose = sc.nextInt();
        if (choose==1){
            m.quWang(P1);
        }else{
            m.quWang(P2);
        }
        System.out.println("请输入你需要的宠物:1,狗狗    2,企鹅");
        int choose02 = sc.nextInt();
        if (choose02==1){
            m.lingYang(P1);
        }else{
            m.lingYang(P2);
        }
    }
}

输出结果图:

 

 作业二2:

使用多态实现为宠物喂食:

父类宠物类:

/**
     * 宠物健康值
     */
    private int intimacy=46;
    /**
     * 宠物亲密度
     */
    private int health=0;

    public int getHealth() {
        return health;
    }

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

    public int getIntimacy() {
        return intimacy;
    }

    public void setIntimacy(int intimacy) {
        this.intimacy = intimacy;
    }

    /**
     * 宠物吃食的方法
     */
    public abstract void eat();
}

子类狗:

package com.Polym;

public class Dog extends Pet {
    public  void eat(){
        if(getIntimacy()<50){
            System.out.println("给狗狗吃狗粮和肉骨头");
            setIntimacy(getIntimacy()+20);
            System.out.println("狗狗现在的健康值是:"+getIntimacy());
            setHealth(getHealth()+10);
            System.out.println("狗狗现在和你的亲密度是:"+getHealth());

        }
    }
}

子类猫咪:

package com.Polym;

public class Cat extends Pet {
    public void eat(){
        if(getIntimacy()<50){
            System.out.println("给猫咪吃猫粮和小鱼仔。。。。");
            setIntimacy(getIntimacy()+30);
            System.out.println("猫咪现在的健康值是:"+getIntimacy());
            setHealth(getHealth()+10);
            System.out.println("猫咪现在和你的亲密度是:"+getHealth());
        }
    }
}

主人类:

package com.Polym;

public class Master {
public void feed(Pet pet){
if(pet instanceof Dog){
pet.eat();
}else if(pet instanceof Cat){
pet.eat();
}
}
}

测试类:

public class Test {
    public static void main(String[] args){
        Master m1 = new Master();
        Dog P1 = new Dog();
        Cat P2 = new Cat();
        System.out.println("狗狗现在的健康值是:"+P1.getIntimacy());
        System.out.println("狗狗现在和你的亲密度是:"+P1.getHealth());
        m1.feed(P1);
        System.out.println("猫咪现在的健康值是:"+P2.getIntimacy());
        System.out.println("猫咪现在和你的亲密度是:"+P2.getHealth());
m1.feed(P2);
}
}

 

输出结果图:

 

 课堂笔记:

多态:
同一个引用类型,使用不同的实参执行不同操作
同一个类型使用不同的对象执行的结果有多种就是多态
一般就两种一种是父类作为参数,一种是父类作为反回值

继承,方法重写,父类引用指向子类对象,是实现多态的基础
1.使用多态时,是使用父类类型,但是对象还是子类对象
2.如果子类不重写父类方法,那么当使用多态时,是不能调用子类独有的方法
3.当子类重写父类方法,使用多态调用的方法,看似时父类的方法但实际调用的时子类中重写父类的那个方法,

一个方法没方法体就叫抽象方法
当一个类中有抽象方法的时候这个类就是抽象类,抽象类不一定有抽象方法,
抽象类不能被实列化,实列化没意义
抽象类的子类可以是普通类,该普通方法必须实现抽象类中抽象方法
抽象类的子类是抽象类时,此时可以不实现抽象类中抽象方法
抽象方法必须加关键词abstract
例: public abstract void a();

向上转型:
子类转化父类
父类型 引用变量名 = new 子类型(); 自动转化类型
此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类本身的方法
此时通过父类引用变量无法调用子类特有的方法
向下转型:
父类转化子类
子类型 引用变量名 = (子类型)父类的引用变量; 需要强制类型转
实列方法:动态绑定机制 调用属性和方法是子类中的
静态方法:静态绑定机制 调用属性和方法是父类中的

 

代码下载链接:https://pan.baidu.com/s/1JBE5GSu7-Fd_i8pnGsYTng
提取码:ghzq

 

posted @ 2019-01-21 20:35  陈xiaolong  阅读(233)  评论(0编辑  收藏  举报