面向对象(三)——多态

Keywords: 多态、instanceof关键字

多态

多态的概述

体现: 父类或者接口的引用指向或者接收自己的子类对象。例如:(day10\DuoTaiDemo.java)

Animal a = new Cat(); //类型提升,向上转型
Cat c = (Cat)a; //强制将父类的引用转成子类类型,向下转型

注意:千万不要将父类对象转成子类类型,仅当父类应用指向自己的子类对象时,该应用可以被提升,也可以被强制换行。多态至始至终都是子类对象在变化。错误示范:

Animal a = new Animal();
Cat c = (Cat)a;

instanceof关键字: 判断引用类型,if(a instanceof Cat)
作用: 多态的存在提高了程序的扩展性和后期可维护性
前提: 1. 需要存在继承或者实现关系;2. 要有覆盖操作
弊端: 只能使用父类的引用访问父类中的成员

多态的特点

成员的特点:
1. 成员函数(非静态)
编译时:参考引用型变量所属的类中的是否有调用的函数。有,编译通过,没有,编译失败。
运行时:参考的是对象所属的类中是否有调用的函数。
简单说:编译看左边,运行看右边。
因为成员函数存在覆盖特性。

2. 成员变量
编译时:参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败。
运行时:参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量。
简单说:编译和运行都参考等号的左边(引用型变量所属的类)。

3. 静态函数(与对象无关)
编译时:参考引用型变量所属的类中的是否有调用的静态方法。
运行时:参考引用型变量所属的类中的是否有调用的静态方法。
简单说,编译和运行都看左边。
其实对于静态方法,是不需要对象的。直接用类名调用即可。

多态的应用

需求:电脑运行实例,电脑运行基于主板
day10\DuoTaiDemo5.java

需求:对于一个数据库的操作
数据是:用户信息
1. 连接数据库。JDBC Hibernate
2. 操作数据库
c:create r:read u:use d:delete
3. 关闭数据库连接


interface UserInfoDao
{
    public abstract void add(User user);
    public abstract void delete(User user);
}

class UserInfoByHibernate implements 
{
    public void add(User user)
    {
        1.Hibernate连接数据库;
        2.使用sql添加语句添加数据;
        3.关闭连接;
    }
    public void delete(User user)
    {
        1.Hibernate连接数据库;
        2.使用sql添加语句删除数据;
        3.关闭连接;
    }
}

class UserInfoByJDBC implements 
{
    public void add(User user)
    {
        1.JDBC连接数据库;
        2.使用sql添加语句添加数据;
        3.关闭连接;
    }
    public void delete(User user)
    {
        1.JDBC连接数据库;
        2.使用sql添加语句删除数据;
        3.关闭连接;
    }
}

class User{}

class BDOperate
{
    public static void main(String[] args)
    {
        UserInfoDao ui = new UserInfoByJDBC();
        ui.add(User user);
        ui.delete(User user);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容