java基础-面向对象-多态(四)

某一个事务不同的体现形态

例如:

人:男人、女人

动物:猫、狗

猫 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);
}
发布了311 篇原创文章 · 获赞 58 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/qq_30353203/article/details/102874464