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);
}
}