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

代码中如何体现:

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

多态的成员访问特点

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

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

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

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

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. Flask 安装 快速入门

    $ pip install flask Flask自带的Server在端口5000上监听: ython app.py flask通过request.form['name']来获取表单的内容. 外部可见 ...

  2. java 获取服务器时间同步本地计算机时间

    http://hi.baidu.com/captives/item/25c8b80170a9b0ccf45ba6f8 ————————————————————————————————————————— ...

  3. vi 的使用,很详细

    来源:鸟哥的Linux私房菜 网址:http://vbird.dic.ksu.edu.tw/linux_basic/0310vi_2.php

  4. 用MathType编辑异或与非符号有什么方法

    在数学中我们会遇到各种数学符号,有运算符号,希腊符号,还有表示逻辑关系的逻辑符号等,这些大多都是比较常用的符号.其中逻辑符号中我们经常会用到异或与非等,这些符号的编辑我们常常会需要用MathType这 ...

  5. 【ask】Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.

    1.周五对nodejs tcp长连接服务器框架进行压测,一切开始比较常规(没什么特殊问题). 2.突然手一哆嗦,把压测用的客户端群一起关闭了. 3.这个时候nodejs的服务器爆出了"Cau ...

  6. NHibernate VS IbatisNet

      NHibernate 是当前最流行的 Java O/R mapping 框架Hibernate 的移植版本,当前版本是 1.0 .2 .它出身于sf.net..IbatisNet 是另外一种优秀的 ...

  7. Servlet初始化及处理HTTP请求

    上一篇详细介绍了与Servlet相关的几个核心的接口和类,当我们自己写Servlet类时,一般需要继承HttpServlet类,实现init().doGet().doPost()等方法.当我们写好Se ...

  8. python 清华镜像pip install

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple

  9. HDU3308(LCIS) 线段树好题

    题目链接:传送门 题目大意:给你n个数,m个操作.操作有两种:1.U x y 将数组第x位变为y   2. Q x y 问数组第x位到第y位连续最长子序列的长度.对于每次询问,输出一个答案 题目思路: ...

  10. mysql的增量备份与全备的脚本

    mysql全量备份.增量备份.开启mysql的logbin日志功能.在/etc/my.cnf文件中加入以下代码: [mysqld]log-bin = "/home/mysql/logbin. ...