栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java的多态

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java的多态

文章目录
      • java的多态
      • 引入的原因
      • 多态(羊皮狼)
      • 练习

java的多态 引入的原因
public class Test {
    public static void main(String[] args) {
        Master master = new Master("tim");
        Dog dog = new Dog("金毛");
        Cat cat = new Cat("蓝猫");
        Fish fish = new Fish("小鱼干");
        Bone bone = new Bone("鸡锁骨");
        master.feed(dog,bone);
        master.feed(cat,fish);
        }
  }
 public  void  feed(Dog dog,Bone bone) {
        System.out.println(name+"给"+dog.getName()+"喂"+bone.getName());
    }
    public  void  feed(Cat cat,Fish fish) {
        System.out.println(name+"给"+cat.getName()+"喂"+fish.getName());
    }

随着多个动物,食物的增加,对于代码整体而言,代码复用性不高,不利于代码维护,所以引入多态

多态(羊皮狼)

方法或对象具有多种形态,是面对对象的第三特征,多态是建立在封装和继承基础之上的

(1)方法的多态

​ 重载和重写就体现多态

(2)对象的多态(核心)

  1. 一个对象的编译类型和运行类型可以不一致

Animal animal = new Dog();
2. 编译类型在定义对象时,就确定了不能改变
3. 运行类型是可以变化的
4. 编译类型看定义时 等号的最左边, 运行类型看 等号的最右边

Animal animal = new Dog();
animal 只是对象引用, new Dog() 才是对象

对象的多态: 可以让一个父类的引用 指向 一个子类的对象

animal 的编译类型是Animal,运动类型是Dog

animal= new Cat(); animal 的编译类型是Animal,运动类型变成了Cat

练习
package com.hspedu.Poly_.objectpoly_;

public class Dog extends Animal{

    public void cry() {
        System.out.println("狗:你在狗叫什么...");
    }
}
package com.hspedu.Poly_.objectpoly_;

public class Cat extends Animal{

    public void cry() {
        System.out.println("猫:你在猫叫什么");
    }
}
package com.hspedu.Poly_.objectpoly_;

public class Animal {
    public static void main(String[] args) {
        Animal animal_1 = new Animal();//编译类型是Animal,运行类型是Animal
        Animal animal_2 = new Dog();//编译类型是Animal,运行类型是Dog
        animal_2.cry();//此时的编译类型是Animal,运行类型是Dog
        animal_2 = new Cat();//此时的编译类型仍然是Animal,但运行类型变成了Cat
        animal_2.cry();//此时的编译类型是Animal,运行类型是Cat

    }
    public  void  cry() {
        System.out.println("Animal动物在叫....");
    }
}

2.

//animal 编译类型是 Animal,可以指向Animal子类的对象
    //food 编译类型是 Food,可以指向Food子类的对象
    
public void feed(Animal animal,Food food) {  System.out.println(this.name+"给"+animal.getName()+"喂"+food.getName());
    }
public class Test {
    public static void main(String[] args) {
        Master master = new Master("Jack");
        Dog dog  = new Dog("金毛");
        Cat cat  = new Cat("蓝猫");
        Fish fish = new Fish("小鱼干");
        Bone bone = new Bone("鸡锁骨");

        master.feed(dog ,bone);
        master.feed(cat,fish);
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/831641.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号