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

代码中如何体现:

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

多态的成员访问特点

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

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

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

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

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面向对象—多态的更多相关文章

  1. Java面向对象多态

    Java面向对象多态 7.2对象 7.2.1创建对象 对象是类的实例 类的名称 对象名称 = new 类的名称(); 7.3继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域 ...

  2. JAVA面向对象-多态的理解

    面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...

  3. Java面向对象-------多态总结

    1.多态:是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 多态性是对象多种表现形式的体现. 2.多态作用: 1. 消除类型之间的耦合关系 ...

  4. java 面向对象 — 多态

    注意:如果用父类引用指向子类对象的时候.不可以调用,子类中有但是父类中没有的方法. 抽象 方法没有具体方法,以分号结束.例:public abstract void call(); 1.接口必须要有a ...

  5. JAVA面向对象-----多态

    多态的概述 1:什么是多态 一个对象的多种状态 (老师)(员工)(儿子) 教师 a =老钟; 员工 b= 老钟; 2:多态体现 1:Father类 1:非静态成员变量x 2:静态成员变量y 3:非静态 ...

  6. Java面向对象----多态概念,对象上下转型

    概念:同一操作作用于某一类对象,可以有不同的解释,产生不同的执行结果 多态存在的三个必要条件 需要存在继承和实现关系 同样的 方法调用而执行不同操作,运行不同的代码(重写操作) 在运行时父类或者接口的 ...

  7. Java面向对象的多态

    Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性 多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态 引用多态的含义就是:父类的引用可 ...

  8. JAVA 面向对象中的多态

    多态是继封装.继承之后,面向对象的第三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一个 ...

  9. 3.java面向对象编程三大特性之多态

    面向对象编程的三大特性:封装.继承.多态 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对类的外部而言它的内部实现细节是隐藏的,暴露给外界的只是它的实现方法. ...

随机推荐

  1. 【JMeter性能测试】之学习资料总结(持续更新)

    本人测试小白,总结一下JMeter性能测试相关文档进行转载学习,下面会贴出原文作者以示感谢: JMeter性能测试学习地址:http://www.ltesting.net/ceshi/open/kyx ...

  2. python之range和xrange

    range 前面小节已经说明了,range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列. 比如: 1 >>> ...

  3. CF678D(Iterated Linear Function)

    题目链接:传送门 题目大意:略 题目思路:用题目所给函数推出表达式,然后用等比求和公式得到关系式套用即可(需用乘法逆元),也可直接构造矩阵,用矩阵快速幂求解. 感受:做题时一定要仔细,需要仔细注意什么 ...

  4. 转载: Flex 布局教程

    demo:页面二等分 .flex-box { display: -webkit-flex; /* Safari */ display: flex; flex-direction: row; justi ...

  5. Less-mixin判断(守卫)一

    mixin卫士--判断 类似于JavaScript的if/else example: .test(@a) when (@a>10){//当大于10 font-size:18px; } .test ...

  6. Less-@import 导入选项

    //@import 导入选项 --@import 可以至于任何你需要导入的地方 在标准的CSS,@import在规则必须先于所有其他类型的规则.但Less.js不关心 example: .test() ...

  7. JS中:数组和二维数组、MAP、Set和枚举的使用

    1.数组和二维数组:   方法一: var names = ['Michael', 'Bob', 'Tracy']; names[0];// 'Michael' 方法二: var mycars=new ...

  8. 巨蟒python全栈开发-第22天 内置常用模块1

    一.今日主要内容 1.简单了解模块 你写的每一个py文件都是一个模块 数据结构(队列,栈(重点)) 还有一些我们一直在使用的模块 buildins 内置模块.print,input random 主要 ...

  9. 微信支付 统一订单 $order = WxPayApi::unifiedOrder($input); 断点调试

    定位至 CODE /** * 将xml转为array * @param string $xml * @throws WxPayException */ public static function I ...

  10. WebStorm7.0的破解版

    EMBRACE 24718-1204201000001h6wzKLpfo3gmjJ8xoTPw5mQvYYA8vwka9tH!vibaUKS4FIDIkUfy!!f3C"rQCIRbShpS ...