zoukankan      html  css  js  c++  java
  • 多态


    一.什么是多态?

    1.生活中的多态:不同类型的打印机,打印的效果不同

    2.程序中的多态:同一引用类型,使用不同的实例且执行不同的操作

    二.使用多态实现思路

    1.编写父类

    2.编写子类,子类重写父类的方法

    3.运行时,使用父类的类型,子类的对象

    实现多态的两个要素:子类重写父类的方法和使用父类的类型

    向上转型:

    Pet pet=new Dog();----->自动类型转换又称为向上转型

    三.实现多态的两种形式

    1.使用父类作为方法形参实现多态

    2.使用父类作为方法返回值实现多态

    四.父类到子类的转换

    1.向下转型(强制类型转换)

    Pet pet=new Dog("欧欧","雪纳瑞");

    Dog dog=(Dog)pet;

    Penguin peng=(Penguin) pet---->报错,必须转为父类指向的真实子类类型

    五.instance of运算符

    语法:对象 instance of 类或接口

    instance of 通常和强制类型转换相结合

    六.多态的思想:

    父类型的引用可以指向内存中的子类对象的内存空间,就可以方便设计方法的参数和返回值类型的时候,可以设计成父类对象,这样的方法在实现时比较简洁,

    在后期进行扩展时,方法比较容易。在代码中,多态使用更多的是父类引用指向子类对象,会自动类型转换(向上转型),有时候也需要调用子类自己的东西,这时候需要还原子类,强制类型转换(向下转型),

    向下转型的时候先使用instanceof运算符做类型判断

    七.代码示范:

    父类Pet类:

     

    public abstract class Pet {

    private String name;

    private int age;

    private int love=100;

    private int health=100;

    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 int getLove() {

    return love;

    }

    public void setLove(int love) {

    this.love = love;

    }

    public int getHealth() {

    return health;

    }

    public void setHealth(int health) {

    this.health = health;

    }

    /** * 吃东西 */

    public abstract void eat();

    /** * 显示宠物的信息 */

    public abstract void show();

    }

    子类Dog类:

    public class Dog extends Pet {

    private String type;

    public String getType() {

    return type;

    }

    public void setType(String type) {

    this.type = type; }

    /**

    * 狗狗和主人玩耍接飞盘 */

    public void catchingFlyDisc(){

    this.setHealth(this.getHealth()-10);

    this.setLove(this.getLove()+5);

    }

    @Override

    public void eat() {

    if(this.getHealth()>=100){

    System.out.println("已经吃饱了,不需要喂食!");

    }else{

    this.setHealth(this.getHealth()+5);

    System.out.println("喂食成功!健康值增加5");

    }

    }

    @Override public void show() {

    System.out.println("我是一只"+type+",我的名字叫"+ this.getName()+",今年"+this.getAge()+"岁"+ ",健康值是"+this.getHealth()+",亲密度是"+this.getLove());

    }

    }

    子类penguin类:

    public class Penguin extends Pet {

    private char sex;

    public char getSex() {

    return sex;

    }

    public void setSex(char sex) {

    this.sex = sex;

    }

    /** * 企鹅和主人玩耍游泳 */

    public void swimming() {

    this.setHealth(this.getHealth() - 10);

    this.setLove(this.getLove() + 5);

    }

    @Override

    public void eat() {

    if (this.getHealth() >= 100) {

     

    System.out.println("已经吃饱了,不需要喂食!");

    } else { this.setHealth(this.getHealth() + 3);

    System.out.println("喂食成功,健康值增加3"); } }

    @Override

    public void show() {

    System.out.println("我的名字叫"+this.getName() +"我的性别"+this.getSex()+ ",今年" + this.getAge() + "岁" + ",健康值是" + this.getHealth() + ",亲密度是" + this.getLove());

    } }

    主人类Master类:

    public class Master {

    /**

    * 主人给宠物喂食 *

    * @param pet

    */

    public void feed(Pet pet) {

    pet.eat();

    }

    /**

    * 主人和宠物玩耍 *

    * @param pet */

    public void play(Pet pet) {

    if (pet instanceof Dog) {/

    /对象属于类类型返回true,否则返回false

    // 强制类型转换,向下转型,将内存中的子类对象进行还原

    Dog dog = (Dog) pet;

    dog.catchingFlyDisc();

    }else if(pet instanceof Penguin){

    Penguin penguin=(Penguin)pet;

    penguin.swimming(); }

    }

    }

    测试类 TsetMaster类:

    public class TsetMaster {

    public static void main(String[] args) {

    Master master=new Master();

    Penguin pen=new Penguin();

    Dog dog=new Dog();

    dog.setName("旺财");

    dog.setAge(4);

    dog.setHealth(80);

    dog.setLove(80);

    dog.setType("中华田园犬");

    master.play(dog);

    dog.show();

    }

    }

  • 相关阅读:
    mysql备份与binlog
    linux释放cached
    linux下mysql迁移到其他分区
    java分析jvm常用指令
    Mac下安装WebStrom
    Final
    Spring 复习
    ubuntu 14.4安装java环境
    php复习
    java 重难点
  • 原文地址:https://www.cnblogs.com/shuaiwenxin/p/6887973.html
Copyright © 2011-2022 走看看