• Java(15) 多态


    一.多态

       1.1 多态:一个事物的多种形态

       1.2 多态的表现

            行为(方法)多态:重写和重载。

            引用多态(动态绑定):编译时的类型和运行时不一致的这种现象

           例:父类 = 子类

                 Pet p = new Dog();

      向上转型;父类=子类

        例:Pet p = new Dog();

         向下转型:子类 = (子类)父类

            例: Dog d = (Dog)p;

     1 public abstract class Pet {
     2     private String name;
     3     private int health=100;
     4     private int age;
     5     private int love=50;
     6     public Pet(){
     7         
     8     }
     9     public Pet(String name,int health,int age,int love){
    10         this.name = name;
    11         this.health = health;
    12         this.age = age;
    13         this.love = love;
    14     }
    15     public String getName(){
    16         return name;
    17     }
    18     public void setName(String name){
    19         this.name= name;
    20     }
    21     public int getHealth(){
    22         return health;
    23     }
    24     public void setHealth(int health){
    25         this.health = health;
    26     }
    27     public int getAge(){
    28         return age;
    29     }
    30     public void setAge(int age){
    31         this.age = age;
    32     }
    33     public int getLove(){
    34         return love;
    35     }
    36     public void setLove(int love){
    37         this.love = love;
    38     }
    39     public void ji(){
    40         System.out.println("宠物的自白:我的名字叫:"+this.name+",年龄为:"+this.age+"和主人的亲密度为:"+this.love);
    41     }
    42     public abstract void eat();
    43 }
    宠物抽象类
     1 public class Dog extends Pet{
     2     private String strain;
     3     public Dog(){
     4         
     5     }
     6     public Dog(String name,int health,int age,int love,String strain){
     7         super(name,health,age,love);
     8         this.strain = strain;
     9     }
    10     public void catchingFlyDisc(){
    11         System.out.println("接飞盘");
    12         int health = getHealth();
    13         health = health-10;
    14         setHealth(health);
    15         
    16         int love = getLove();
    17         love = love+5;
    18         setLove(love);
    19     }
    20     public void eat(){
    21         System.out.println("狗狗吃鱼");
    22     }
    23     public String getStrain(){
    24         return strain;
    25     }
    26     public void setStrain(String strain){
    27         this.strain = strain;
    28     }
    29 
    30 }
    狗狗类继承宠物类
     1 public class Penguin extends Pet {
     2     private String sex;
     3     public Penguin(){
     4         
     5     }
     6     public Penguin(String name,int health,int age,int love,String sex){
     7         super(name,health,age,love);
     8         this.sex = sex;
     9     }
    10     public void swimming(){
    11         System.out.println("游泳");
    12         int health = getHealth();
    13         health = health-10;
    14         setHealth(health);
    15         
    16         int love = getLove();
    17         love = love+5;
    18         setLove(love);
    19     }
    20     public void eat(){
    21         System.out.println("企鹅喝水");
    22     }
    23     public String getSex(){
    24         return sex;
    25     }
    26     public void setSex(String sex){
    27         this.sex = sex;
    28     }
    29 
    30 }
    企鹅类继承宠物类
     1 public class Master {
     2     public void feed(Pet p){
     3         p.eat();
     4     }
     5     public void play(Pet p){
     6         if(p instanceof Dog ){
     7             Dog d = (Dog) p;
     8             d.catchingFlyDisc();
     9         }else if(p instanceof Penguin){
    10             Penguin pe = (Penguin) p;
    11             pe.swimming();
    12         }
    13     }
    14 }
    主人类
     1 public class TestPMPD {
     2     public static void main(String[] args){
     3         Master m= new Master();
     4         //向下转型
     5         Pet p = new Dog();
     6         Dog d = (Dog) p;
     7         m.feed(d);
     8 //        Pet p = new Penguin();
     9 //        m.feed(p);
    10     }
    11 }
    测试类

    运行结果为: 

      注意:java.lang.ClassCastException:类型转换异常

              父类的运行时类型跟要转成的子类的类型不一致

      注意:引用多态存在继承关系

    二.instanceof

      语法: 对象A instanceof 类型B

          判断对象A的类型是否是类型B,是就返回true,否则返回false

    例:d instanceof Dog

    三.实现多态的2种形式

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

        public void play(Pet p){...}

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

        public Pet getPet(int type){...} 

  • 相关阅读:
    pytorch中tensor张量的创建
    TensorFlow keras 迁移学习
    TensorFlow keras vgg16net的使用
    TensorFlow keras dropout层
    TensorFlow keras卷积神经网络 添加L2正则化
    TensorFlow-keras 100分类
    TensorFlow-keras fit的callbacks参数,定值保存模型
    fashion_mnist多分类训练,两种模型的保存与加载
    keras API的使用,神经网络层,优化器,损失函数,查看模型层数,compile和fit训练
    ZOJ 2974 矩阵快速幂
  • 原文地址:https://www.cnblogs.com/-chaoming/p/7019784.html
Copyright © 2020-2023  润新知