多态性与转型

方法的多态性

  • 方法的重载:同一个方法名,参数列表不同,可以根据传入的参数类型或个数的不同实现不同功能的执行;

  • 方法的覆写:同一个方法名,参数列表相同,可以根据使用子类的不同有不同的实现。

对象的多态性:父子实例之间的转换处理

  • 对象向上转型:父类 父类实例 = 子类实例,自动完成转换,并且子类覆写了父类的方法

    • 大多数情况下考虑对象的向上转型

    • 主要特点在于对参数进行统一的设计,有时重载也可解决问题,但是不易维护的

    • 代码实例:
       1 class Message {
       2     public void print() {
       3         System.out.println("Message");
       4     }
       5 }
       6 class DatabaseMessage extends Message {
       7     public void print() {
       8         System.out.println("Connecting to the database...");
       9     }
      10 }
      11 class WebServerMessage extends Message {
      12     public void print() {
      13         System.out.println("Connecting to the web server...");
      14     }
      15 }
    • 使用转型:

      1 class Solution {
      2     public static void main(String[] args) {
      3         Message msg=new DatabaseMessage();
      4         msg.print();
      5     }
      6 }

      也可写成:

       1 class Solution {
       2     public static void main(String[] args) {
       3         func(new DatabaseMessage());
       4         func(new WebServerMessage());
       5     }
       6  
       7     public static void func(Message msg) {
       8         msg.print();
       9     }
      10 }
    • 使用重载(不易维护):

       1 class Solution {
       2     public static void main(String[] args) {
       3         func(new DatabaseMessage());
       4         func(new WebServerMessage());
       5     }
       6 
       7     public static void func(DatabaseMessage msg) {
       8         msg.print();
       9     }
      10 }
  • 对象向下转型:子类 子类实例 = (子类)父类实例,强制完成转换 

    • 在需要使用子类自己的特殊定义时使用

    • 需要先向上再向下,存在隐患

      1 Person per=new Superman();
      2 Superman man=(Superman) per;

      ==> 使用关键字 instanceof 来判断

Object类

  • Object类是所有类的父类,因此可以用Object类接受所有的类和包括数组的所有引用类型

原文地址:https://www.cnblogs.com/irisiscool/p/13083534.html