zoukankan      html  css  js  c++  java
  • 2019-1-21 笔记、作业

    一、生活中的多态

      1、生活多态:同一种事物,由于条件不同,产生的结果也不同

          多态:同一个引用类型,使用不同的实例而执行不同操作

      2、多态三要素:继承,方法重写,父类引用指向子类对象

      

      PS:1、使用多态时,是使用父类的类型,但是对象是子类对象;

        2、如果子类不重写父类方法,那么当使用多态时,是不能调用子类独有的方法;(即谁的类型调谁的方法)

        3、当子类重写父类方法,看似调用的是父类中的方法,但实际使用是子类中重写过父类的方法

      

      3、当父类引用指向子类对象/父类类型创建子类对象时,这个对象不能够使用子类独有的方法

        当使用多态时,创建对象必须是-----父类类型  对象名  = NEW  子类构造方法;

      4、实现多态的两种方式

        A、使用父类作为方法参数

        B、使用父类作为方法返回值 

    二、抽象(abstract)

      抽象类:表示这个类的对象是不存在的,因此抽象类不能够被实例化对象,但是可以使用抽象类来创建对象,通常是创建子类对象,也就是多态;

          因此不需要具体实现的方法,可以把这个方法定义为抽象方法

          抽象类中可以有非抽象方法和抽象方法,但是抽象方法只能存在抽象类中

      

    作业:用多态实现主人领养宠物并与宠物玩耍、以及宠物喂食

    package java_2019_1_21;
    /**
     * 父类,宠物类
     * @author Administrator
     */
    public abstract class Pet {
    	
    	private String name;
    	private int macy;
    	private int health;
    	
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	public int getMacy() {
    		return macy;
    	}
    	public void setMacy(int macy) {
    		if(macy<0) {
    			System.out.println("亲密度为正整数,您输入有误,默认为60");
    			this.macy = macy;
    		}else {
    			this.macy = macy;
    		}
    	}
    	
    	public int getHealth() {
    		return health;
    	}
    	public void setHealth(int health) {
    		if(health<0) {
    			System.out.println("健康值为正整数,您输入有误,默认为60");
    			this.health = health;
    		}else {
    			this.health = health;
    		}
    	}
    	
    	//宠物玩耍
    	public abstract void play();
    	
    	//宠物喂食
    	public abstract void eat();
    }
    

      

    package java_2019_1_21;
    /**
     * 狗狗类
     * @author Administrator
     */
    public class Dog extends Pet{
    	
    	public Dog() {}
    	
    	public Dog(String name,int macy,int health) {
    		super.setName(name);
    		super.setMacy(macy);
    		super.setHealth(health);
    	}
    	
    	public void play() {
    		System.out.println("跟狗狗一起玩,狗狗会接飞盘!");
    	}
    	
    	public void eat() {
    			System.out.println("正在给狗狗喂食...");
    			this.setHealth(this.getHealth()+3);
    	}
    }
    

      

    package java_2019_1_21;
    /**
     * 企鹅类
     * @author Administrator
     */
    public class Penguin extends Pet{
    	
    	public Penguin() {}
    	
    	public Penguin(String name,int macy,int health) {
    		super.setName(name);
    		super.setMacy(macy);
    		super.setHealth(health);
    	}
    	
    	public void play() {
    		System.out.println("跟企鹅一起游戏!");
    	}
    	
    	public void eat() {
    		System.out.println("正在给企鹅喂食...");
    		this.setHealth(this.getHealth()+5);
    	}
    }
    

      

    package java_2019_1_21;
    /**
     * 主人类
     * @author Administrator
     */
    public class Master {
    	//宠物玩耍
    	public static void play(Pet p) {
    		if(p instanceof Dog) {
    			Dog d = (Dog)p;
    			d.play();
    		}else if(p instanceof Penguin) {
    			Penguin pen = (Penguin)p;
    			pen.play();
    		}
    	}
    	//宠物喂食
    	public static void eat(Pet p) {
    		if(p.getHealth()<100) {
    			if(p instanceof Dog) {
    				if(p.getHealth()+3>100) {
    					System.out.println("现在狗狗的饱食度有"+p.getHealth()+",不需要喂食了!");
    				}else {
    					Dog d = (Dog)p;
    					d.eat();
    				}
    			}else if(p instanceof Penguin) {
    				if(p.getHealth()+5>100) {
    					System.out.println("现在企鹅的饱食度有"+p.getHealth()+",不需要喂食了!");
    				}else {
    					Penguin pen = (Penguin)p;
    					pen.eat();
    				}
    			}
    		}
    	}
    }
    

      

    package java_2019_1_21;
    /**
     * 测试类
     * @author Administrator
     */
    public class Test {
    	public static void main(String[] args) {
    		Pet p = new Dog("小白",55,98);
    		Pet p1 = new Penguin("小QQ",55,88);
    		
    		System.out.println("******玩耍测试*****");
    		Master.play(p);
    		Master.play(p1);
    		System.out.println("******喂测试***");
    		Master.eat(p);
    		Master.eat(p1);
    	}
    }
    

      结果:

  • 相关阅读:
    成员对象和封闭类
    静态成员
    this指针
    类型构造构造函数
    拷贝构造函数
    C++
    矩阵快速幂求递推式
    对浅拷贝和深拷贝的基本理解
    传引用作为形参和返回值_节省参数拷贝的时间
    namespace的基本知识
  • 原文地址:https://www.cnblogs.com/chenxj/p/10300027.html
Copyright © 2011-2022 走看看