某一个事务不同的体现形态
例如:
人:男人、女人
动物:猫、狗
猫 x = new 猫();
动物 x = new 猫();
1、多态的体现
父类的引用指向了自己的子类对象
父类的引用也可以接受自己的子类对象
2、多态的前提
必须是类与类之间有关系,要么继承、要么实现,通常还有一个前提,存在覆盖
3、多态的好处
多态的出现大大的提高了程序的扩展性
4、多态的弊端
提高的扩展性,但是只能使用父类的引用访问父类中的成员
多态的转型
5、在多态中成员的特点
在多态中成员函数的特点
在编译中,参阅引用类型变量所属的类(父类)中是否有调用的方法,如果有,编译通过,如果没有,编译失败
在运行中,参阅对象所属的类中是否有调用的方法
在多态中成员变量的特点
无论编译和运行,都参考左边(引用型变量所属的类 (父类))
在多态中,静态成员函数的特点
无论编译和运行,都参考左边
Fu z = new zi();
z.method1();
z.method2();
z.method3();
class 毕姥爷{
void 讲课(){
System.out.println("企业管理");
}
void 钓鱼(){
System.out.println("钓鱼");
}
}
class 毕老师 extends 毕姥爷{
void 讲课(){
System.out.println("JAVA");
}
void 看电影(){
System.out.println("看电影");
}
}
class {
public static void main(String[] args) {
毕姥爷 x = new 毕老师(); //毕老师对象被提升为了毕姥爷类型。 向上转型
// x.讲课();
// x.看电影(); //错误.
毕老师 y = (毕老师)x; //将毕姥爷类型强制转换成毕老师类型。 向下转型
y.看电影();//在多态中,自始自终都是子类对象在做着类型的变化。
}
}
6、多态的应用
interface UserInfoDao
{
public void add(User user);
public void delete(User user);
}
class UserInfoByJdbc implements UserInfoDao
{
public void add(User user)
{
使用jdbc 建立连接
新增用户
使用jdbc 断开连接
}
public void delete(User user)
{
使用jdbc 建立连接
删除用户
使用jdbc 断开连接
}
}
class UserInfoByHibernate implements UserInfoDao
{
public void add(User user)
{
使用Hibernate 建立连接
新增用户
使用Hibernate 断开连接
}
public void delete(User uer)
{
使用Hibernate 建立连接
删除用户
使用Hibernate 断开连接
}
}
public static void main(String[] args)
{
UserInfoDao ui = new UserInfoByJdbc();
ui.add(user);
ui.delete(user);
//如果后期想换连接方式 ,右侧直接改动就可以,降低耦合性,便于扩展
UserInfoDao ui = new UserInfoByHibernate();
ui.add(user);
ui.delete(user);
}