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,异常经常在向下转型中出现,不能指鹿为马.
Java面向对象—多态的更多相关文章
- Java面向对象多态
Java面向对象多态 7.2对象 7.2.1创建对象 对象是类的实例 类的名称 对象名称 = new 类的名称(); 7.3继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域 ...
- JAVA面向对象-多态的理解
面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...
- Java面向对象-------多态总结
1.多态:是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 多态性是对象多种表现形式的体现. 2.多态作用: 1. 消除类型之间的耦合关系 ...
- java 面向对象 — 多态
注意:如果用父类引用指向子类对象的时候.不可以调用,子类中有但是父类中没有的方法. 抽象 方法没有具体方法,以分号结束.例:public abstract void call(); 1.接口必须要有a ...
- JAVA面向对象-----多态
多态的概述 1:什么是多态 一个对象的多种状态 (老师)(员工)(儿子) 教师 a =老钟; 员工 b= 老钟; 2:多态体现 1:Father类 1:非静态成员变量x 2:静态成员变量y 3:非静态 ...
- Java面向对象----多态概念,对象上下转型
概念:同一操作作用于某一类对象,可以有不同的解释,产生不同的执行结果 多态存在的三个必要条件 需要存在继承和实现关系 同样的 方法调用而执行不同操作,运行不同的代码(重写操作) 在运行时父类或者接口的 ...
- Java面向对象的多态
Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性 多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态 引用多态的含义就是:父类的引用可 ...
- JAVA 面向对象中的多态
多态是继封装.继承之后,面向对象的第三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一个 ...
- 3.java面向对象编程三大特性之多态
面向对象编程的三大特性:封装.继承.多态 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对类的外部而言它的内部实现细节是隐藏的,暴露给外界的只是它的实现方法. ...
随机推荐
- 14 javaBean 组件
bean类不应该有公开的实例变量. 持续性的值应该通过 getXxx 和 setXxx 方法访问. <jsp: useBean id=”beanName” class=”package.Clas ...
- jsp页面form表单提交时候乱码
1.问题描述: 表单提交中文乱码问题,怎么解决 2.原因 当表单传输到服务器上时,服务器会将传输的数据进行编码(iso-8859-1),然后当我们从服务器上面取数据的时候,就会出现乱码 3.解决的方式 ...
- PAT001 一元多项式求导
题目: 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格 ...
- python笔记8 - excel操作
前提: python操作excel需要使用的模块有xlrd.xlwt.xlutils.对excel进行读.写.更新操作.操作excel时需要先导入这些模块,demo如下: excel-读操作知识点: ...
- Ubuntu使用yah3c连接校园网
虽然网上有,但是我还是把这当作学习的一个过程记录下来,以备不时之需. 刚开始总是以为要上校园网就要用inode,所以总是百度谷歌不到方法,后来才知道yah3c不等同于inode,二者应该是并行的关系. ...
- uGUI动态加载控件位置错误
最近在使用uGUI时遇到了一个问题,在此记录一下.在Canvas的Render Mode设置为Screen Space-Overlay模式时,动态加载控件是不会发生问题的.但是在Screen Spac ...
- Ubuntu安装qBittorrent
qBitTorrent是Ubuntu Linux中最受欢迎的P2P软件之中的一个. 出自一名法国大学生之手的qBitTorrent功能强大.界面精美.操作直观. qBitTorrent是Linux中最 ...
- [越狱开发] theOpenDev配置与搭建碰到的问题
CodeSign error: code signing is required for product type 'Dynamic Library' in SDK 'iOS 6.1' 如何解决?
- Oracle数据库不能创建表空间及表中文乱码问题
1.不能创建表空间问题 datafile为表空间的存放位置,没有将表空间存放路径指定为orcl数据库时,创建表空间出错如下 查看自己的Oracle安装位置,我的Oracle10g安装在虚拟XP系统中, ...
- linux串口编程参数配置详解
1.linux串口编程需要的头文件 #include <stdio.h> //标准输入输出定义 #include <stdlib.h> //标准函 ...