多态性

作者: 曾梦想仗剑天涯 | 来源:发表于2020-10-30 10:00 被阅读0次

多态性简介

  • 多态性是在继承的基础之上扩展出来的概念,也就是说可以实现父子类之间的互相转换处理

  • 在Java之中对于多态性有两种实现的模式:

    • 方法的多态性:
      ·1. 方法的重载:同一个方法名称可以根据传入的参数的类型或个数的不同实现不同功能的执行;
      ·2. 方法的覆写:同一个方法可能根据子类的不同有不同的实现;
    • 对象的多态性:父子实例之间的转换处理,它有两种模式:
      ·1. 对象的向上转型:父类 父类实例 = 子类实例;自动完成转换
      ·2. 对象的向下转型:子类 子类实例 = (子类) 父类实例;强制转换
  • 从实际的转型处理来讲,大部分情况下考虑的是对象的向上转型,而对象的向下转型都是在使用子类的特殊功能(子类可以对父类进行功能扩充)的时候要采用向下转型

对象向上转型(接受或返回参数的统一性)

    对象转型的处理属于多态性,而这一特性必须在继承性的基础上实现。

/**
  向上转型的主要特点在于,可以对参数进行统一的设计
*/
class Message {
  public void print() {
    System.out.println("********** Channel ************");
  }
}
class DataBaseMessage extends Message {
  public void print() {
    System.out.println("进行了databasse连接");
  }
}
class WebServerMessage extends Message {
  public void print() {
    System.out.println("进行了webservermessage连接");
  }
}
 public class JavaDemo {
  public static void main(String [] args) {
    //向上转型
    fun(new DataBaseMessage());   //  Message msg = new DataBaseMessage()
    fun(new WebServerMessage());    //  Message msg = new WebServerMessage()
  }
  public static void fun(Message msg) {
    msg.print();
  }
}

对象向下转型

    向下转型主要特点在于需要使用到一些子类自己特殊的定义处理。

class Person {
  public void print() {
    System.out.println("一个正常的人类");
  }
}
class SuperMan extends Person {
  public String fly() {
    return "飞";
  }
  public String fire() {
    return "喷火";
  }
}
public class JavaDemo {
  public static void main(String [] args) {
    Person per = new SuperMan();  //向上转型
    SuperMan man = (SuperMan) per;  //向下转型
    System.out.println(man.fly());
    System.out.println(man.fire());
  }
}
  • 向上描述的是一些公共的特征,而向下描述的是子类自己特殊的定义环境,但是向下转型并不是一件安全的事情,因为在进行向下转型之前一定要先发生向上转型
//错误程序
Person per = new Person();  
SuperMan man = (SuperMan) per;  //向下转型
  • 所以只要在发生对象向下转型之前一定要首先发生向上转型,两个没人任何关系的实例如果要发生强制转换,那么就会出现"ClassCastException"异常,所以向下转型并不是一件安全的事情。

instanceof关键字

    通过分析来看,向下转型存在安全隐患,所以为了保证向下转型的正确性,往往需要在进行转型之前进行判断,判断某个实例是否是某个类的对象,这个就需要instanceof语法来实现。

  • 对象 instanceof 类, 返回boolean类型,如果是true表示实例是指定类对象
Person per = new Person();
System.out.println(per instanceof Person);  //true
System.out.println(per instanceof SuperMan);  //false


Person per = new SuperMan();  //向上转型
System.out.println(per instanceof Person);  //true
System.out.println(per instanceof SuperMan);  //true


Person per = new SuperMan();  //向上转型
if(per instanceof SuperMan) {  
  SuperMan man = (SuperMan) per;
  System.out.println(man.fly());
  System.out.println(man.fire());
}

相关文章

  • 详解Java多态

    详解Java多态 多态定义 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态...

  • C#魔帅-lesson_03-多态性

    多态性 多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。多态性可以是静态的或...

  • JAVA面向对象学习(多态性)

    多态性的理解和应用 1.1. 多态性的理解 多态性:在Java中,多态性是它的一大特性,可以理解成为是事物的多种形...

  • 多态

    面向对象特征之三:多态性 1、理解多态性:一个事物的多种形态 2、什么是多态性?对象的多态性:父类的引用指向子类的...

  • 第五章多态性

    第5章 多态性 一、编译时的多态性和运行时的多态性 多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的...

  • 明明白白——虚函数,虚指针,虚表,虚继承

    多态性 多态性指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性...

  • Java面向对象-多态性

    一、多态性 多态性的体现: 对象的多态性: 向上转型:程序会自动完成父类 父类对象 = 子类实例 向下转型:强...

  • 2020-02-20 Java 面向对象的多态性

    1.多态性的体现: 方法的重载和重写 对象的多态性 2.对象的多态性: 向上转型:程序会自动完成。...

  • 第十八课:多态性

    特点 对象的多态性: 分家导致的财产纠纷 方法 的多态性:双重事件

  • 面向对象-多态性

    /* 面向对象的特征三:多态性 1.多态性指的是什么?多态性,可以理解为一个事物的多种表型形态。 1)方法的重载与...

网友评论

      本文标题:多态性

      本文链接:https://www.haomeiwen.com/subject/lqwrvktx.html