Java面向对象—多态

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Java面向对象—多态

概述:同一个事物,在不同的时刻表现出不同的状态。


代码中如何体现:


要有继承, 要有方法重写, 父类引用指向子类对象


多态的成员访问特点


成员变量:编译看左边(父类), 运行看左边


成员方法:编译看左边,运行看右边(子类)对象(注意:这就是多态的精华)---父类引用指向子类对象,在执行的过程中执行子类重写的方法


构造方法:子类不能继承构造方法,默认访问父类空参构造


静态方法:编译看左边,运行看左边

package cn.czbk.no5;
import java.util.Scanner;
public class PolyTest {
    public void polyUse(DBConn dbtype){
        dbtype.conn();
        /**
         * 向上类型转换后父类引用就不能使用子类特有的功能
         * 通过向下类型转换(强制类型转换)可以解决这个问题
         */
        OracleConn oracle =(OracleConn)dbtype;
        oracle.oraclePrint();
    }
    public static void main(String[] args) {
        DBConn dbtype = null;
        PolyTest pt=new PolyTest();
        //在用户输入之前你并不知道要调用哪一个数据库连接
        //在程序执行之后用户输入完毕之后才能确认
        Scanner sc =new Scanner(System.in);
        String dbName=sc.nextLine();
        switch (dbName)
        {
        case "Oracle":
            dbtype=new OracleConn();
            break;
        case "DB2":
            dbtype=new DB2Conn();
            break;
        case "Mysql":
            dbtype=new MysqlConn();
            break;
        default:
            System.out.println("end");
            break;
        }
        //多态的使用可以减少代码的编写,直接下面一句话就可以了
        //提高代码的扩展性,要加其他类型的数据库的话直接在下面加就可以了上面的并不需要改
        pt.polyUse(dbtype);
    }
}
class DBConn{
    public void conn(){
        System.out.println("连接数据库");
    }
}
class OracleConn extends DBConn{
    public void conn(){
        System.out.println("连接Oracle数据库");
    }
    public void oraclePrint(){
        System.out.println("%like%");
    }
}
class DB2Conn extends DBConn{
    public void conn(){
        System.out.println("连接DB2数据库");
    }
}
class MysqlConn extends DBConn{
    public void conn(){
        System.out.println("连接Mysql数据库");
    }
}

多态的好处: 提高代码的扩展性;


如何使用多态?


1.写一个父类


2. 写一个或多个子类, 重写父类的方法


3.写一个使用类,在使用类中写一个方法,方法的参数类型定义为父类类型.


4.调用使用类的方法,传入不同的子类对象


多态的弊端: 不能调用子类特有功能.


如何解决: 向下转型(强制转换):


向上转型和向下转型 向上转型:


1. Animal a = new Cat();


2. Cat c = new Cat(); Animal a2 = c; 向下转型(强制转换): Cat c2 = (Cat)a;


注意:java.lang.ClassCastException,异常经常在向下转型中出现,不能指鹿为马.


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
算法 Java 程序员
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
69 9
|
22天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
14 2
|
1月前
|
存储 Java 测试技术
Java零基础-多态详解
【10月更文挑战第10天】Java零基础教学篇,手把手实践教学!
22 4
|
1月前
|
Java 编译器 程序员
Java多态背后的秘密:动态绑定如何工作?
本文介绍了Java中多态的实现原理,通过动态绑定和虚拟方法表,使得父类引用可以调用子类的方法,增强了代码的灵活性和可维护性。文中通过具体示例详细解析了多态的工作机制。
41 4
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
1月前
|
Java
java继承和多态详解
java继承和多态详解
43 5
|
1月前
|
存储 Java 测试技术
Java零基础-多态详解
【10月更文挑战第1天】Java零基础教学篇,手把手实践教学!
29 1
|
1月前
|
安全 Java 编译器
【一步一步了解Java系列】:重磅多态
【一步一步了解Java系列】:重磅多态
20 3
|
2月前
|
Java 编译器
Java——类与对象(继承和多态)
本文介绍了面向对象编程中的继承概念,包括如何避免重复代码、构造方法的调用规则、成员变量的访问以及权限修饰符的使用。文中详细解释了继承与组合的区别,并探讨了多态的概念,包括向上转型、向下转型和方法的重写。此外,还讨论了静态绑定和动态绑定的区别,以及多态带来的优势和弊端。
66 9
Java——类与对象(继承和多态)
|
2月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
35 4
下一篇
无影云桌面