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

代码中如何体现:

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

多态的成员访问特点

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

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

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

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

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. 【Mac + Python3.6 + ATX基于facebook-wda】之IOS自动化(三):facebook-wda库--API学习以及附录:Github上对WDA的问题解答

    下面简单介绍facebook-wda库--API的学习 import wda # debug模式,会在run运行时控制台生成消息 wda.DEBUG = False # False 关闭,True开启 ...

  2. 本地连接linux虚拟机的方法

    1.给虚拟机添加一个ehtX: 2. 3.添加一个ethX 4. 5.设置使用的是哪一个网卡,ifconfig的时候变会得到相应的ip 6. 再在cmd那ping ifconfig出来的自动获取的ip ...

  3. PAT002 Reversing Linked List

    题目: Given a constant K and a singly linked list L, you are supposed to reverse the links of every K ...

  4. 描述J2EE框架的多层结构,并简要说明各层的作用。

    描述J2EE框架的多层结构,并简要说明各层的作用. 解答: 1) Presentation layer(表示层) a. 表示逻辑(生成界面代码) b. 接收请求 c. 处理业务层抛出的异常 d. 负责 ...

  5. 蓝桥杯 第三届C/C++预赛真题(6) 大数乘法(数学题)

    对于32位字长的机器,大约超过20亿,用int类型就无法表示了,我们可以选择int64类型,但无论怎样扩展,固定的整数类型总是有表达的极限!如果对超级大整数进行精确运算呢?一个简单的办法是:仅仅使用现 ...

  6. [CB2]start up

    1.更新源 From:http://cubie.cc/forum.php?mod=viewthread&tid=3054&extra= sudo emacs 打开/etc/apt/so ...

  7. 《Start Developing iOS Apps Today》摘抄

    原文:<Start Developing iOS Apps Today> Review the Source Code 入口函数main.m #import <UIKit/UIKit ...

  8. 存储过程根据ouID获取IntlPerson数据表

    /****************************************************************************** ** Name: usp_base_Ge ...

  9. iOS开发之--storyboary下,拖拽一个tableview/collectionView/view 等,顶端下沉64个像素的处理方法

    大家可能会发现,在sb或者xib里面拖拽一个tableview/collectionview/view的,顶端会自动下沉64个像素,也就是说,运行在模拟器上去,自导航下面又自动下沉了64个像素, 那是 ...

  10. logback配置每天生成一个日志文件,保存30天的日志文件

    <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 文件输出格 ...