领略多态的魅力-对象向上转型 | 带你学《Java面向对象编程》之四十八

简介: 本节为读者介绍了对象多态性中的向上转型,并结合案例为读者详细说明了向上转型的作用与用法。

上一篇:初识面向对象第三特征-多态 | 带你学《Java面向对象编程》之四十七
【本节目标】
通过阅读本节内容,你将了解到向上转型在编程过程中带来的便利性与面向对象编程的魅力,学会借助继承与向上转型实现某些复杂的业务逻辑。

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

对象转型的处理属于多态性,而这一特性必须在继承性的基础上实现。
范例:观察一个简单代码

class Message {
    public void print() {
        System.out.println(“www.mldn.cn”) ;  
    }
}
Class DataBaseMessage extends Message {
    public void print() {
        System.out.println(“Oracle数据库连接信息…..”) ;
    }
}
public class JavaDemo{
    public static void main(String args[]) {
        DataBaseMessage msg = new DataBaseMessage() ;
        msg.print() ;
    }
}

本程序是一个简单的方法覆写操作实现,整体的程序之中可以发现,由于现在实例化的是子类对象,并且子类对象覆写了父类中的print()方法,所以调用的是被覆写过的方法。
范例:观察向上转型

class Message {
    public void print() {
        System.out.println(“www.mldn.cn”) ;  
    }
}
Class DataBaseMessage extends Message {
    public void print() {
        System.out.println(“Oracle数据库连接信息…..”) ;   //执行结果: Oracle数据库连接信息…..
    }
}
public class JavaDemo{
    public static void main(String args[]) {
        Message msg = new DataBaseMessage() ;    //向上转型
        msg.print() ;
    }
}

那么这个时候就需要思考了,向上转型这种操作有什么主要的用处呢?

class Message {
    public void print() {
        System.out.println(“www.mldn.cn”) ;  
    }
}
class DataBaseMessage extends Message {
    public void print() {
        System.out.println(“Oracle数据库连接信息…..”) ;   
    }
}
class WebServerMessage extends Message {
    public void print() {
        System.out.println(“WEB服务器连接信息…..”) ;   
    }
}
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() ;
    }
}

执行结果:
Oracle数据库连接信息…..
WEB服务器连接信息…..
向上转型的主要特点在于可以对参数进行统一的设计。但是为什么此时不使用重载来解决当前问题?

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(DataBaseMessage msg) {   //不管传递的是哪一个子类都可以接收
        msg.print() ;
    }
    public static void fun(WebServerMessage msg) {   //不管传递的是哪一个子类都可以接收
        msg.print() ;
    }
}

现在的操作利用了重载解决了当前的设计,的确可以实现与之前完全一样的效果。但是在进行程序类设计的时候除了满足于当前的要求之外,还需要做出可维护性的设计。如果说现在随着项目的发展,Message产生了3W个子类,那么这个时候每当扩充一个Message子类之后就需要追加一个fun()的方法重载,这样就对程序的维护性造成很大影响。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:领略多态的魅力-对象向下转型 | 带你学《Java面向对象编程》之四十九
更多Java面向对象编程文章查看此处

相关文章
|
12天前
|
Java
Java中的继承和多态是什么?请举例说明。
Java中,继承让子类继承父类属性和方法,如`class Child extends Parent`,子类可重写父类方法。多态允许父类引用指向子类对象,如`Animal a = new Dog()`,调用`a.makeSound()`会根据实际对象类型动态绑定相应实现,增强了代码灵活性和可扩展性。
10 0
|
19天前
|
安全 Java 数据安全/隐私保护
|
19天前
|
搜索推荐 Java
Java的面向对象特性主要包括封装、继承和多态
【4月更文挑战第5天】Java的面向对象特性主要包括封装、继承和多态
15 3
|
25天前
|
Java
java8中List对象转另一个List对象
java8中List对象转另一个List对象
37 0
|
2天前
|
Java
Java基础之对象的引用
Java基础之对象的引用
5 0
|
6天前
|
Java
Java中如何克隆一个对象?
【4月更文挑战第13天】
14 0
|
7天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。
|
12天前
|
存储 Java 编译器
对象的交响曲:深入理解Java面向对象的绝妙之处
对象的交响曲:深入理解Java面向对象的绝妙之处
46 0
对象的交响曲:深入理解Java面向对象的绝妙之处
|
17天前
|
Java
在Java中,多态性允许不同类的对象对同一消息做出响应
【4月更文挑战第7天】在Java中,多态性允许不同类的对象对同一消息做出响应
17 2
|
25天前
|
Java
Java常用封装Base对象
Java常用封装Base对象
8 0