zoukankan      html  css  js  c++  java
  • 多态性与转型

    方法的多态性

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

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

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

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

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

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

      • 代码实例:
         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类接受所有的类和包括数组的所有引用类型

  • 相关阅读:
    [Bzoj2286]消耗战(虚树+DP)
    [Bzoj3252]攻略(dfs序+线段树)
    [Bzoj3991]寻宝游戏(dfs序+set)
    [Codeforces947D]Riverside Curio(思维)
    java常见面试题及答案 1-10(基础篇)
    Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享
    MySQL 实现row_number() 分组排序功能
    精华帖----网址收藏
    easyUI loyout tabs自适应宽度
    jquery 图片本地预览
  • 原文地址:https://www.cnblogs.com/irisiscool/p/13083534.html
Copyright © 2011-2022 走看看