黑马程序员-------多态

来源:互联网 发布:gotv倚天屠龙记ts源码 编辑:程序博客网 时间:2024/06/05 16:39

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

1. 什么是多态

多态:指同一实体具有多种形态

比如 我去动物园看动物,动物有好多种 狮子、大象、猴子等

人包括 男人和女人

这里的所说的“动物”和“人”  就有好多的形态  就是这个意思


2.关于多态

1)多态的体现

父类的引用指向了自己的子类对象

父类的引用也可以接受自己的子类对象

2)多态的前提

必须是类与类之间有关系,要么继承要么实现

通常还有一个前提:存在覆盖 

3)多态的好处

多态的出现大大提高程序的扩展性。

4)多态的弊端

提高了扩展性,但是只能使用父类的引用访问父类的成果

abstract class Animal{
abstract void eat();

}

class Cat extends Animal{
void eat() {
System.out.println("吃鱼");
}
public void catchMouse(){
System.out.println("抓老鼠");
}
}


class Dog extends Animal{
void eat(){
System.out.println("吃骨头");
}
public void kanjia(){
System.out.println("kanjia");
}
}
public class DuoTaiDemo {
public static void main(String[] args) {
function(new Cat());
}

public static void function(Animal a)//Animal a = new Cat();
{
a.eat();
}
}


多态转型

Animal a = new  Cat();  //  类型提升,向上转型

如果要调用子类 猫的特有方法 应转变成子类类型,向下转型

Cat   c = (Cat)a;  //  向下转型


5)多态成员的特点

class Fu{int  num = 4;void method1(){System.out.println("fu  method_1");}void method2(){System.out.println("fu  method_2");}static void method4(){System.out.println("fi  method_4");}}class Zi extends Fu{void method1(){System.out.println("zi  method_1");}void method3(){System.out.println("zi  method_3");}static void method4(){System.out.println("zi  method_4");}}public class DuoTaiDemo4 {public static void main(String[] args) {//Fu f = new Zi();//System.out.println(f.num);////Zi z = new Zi();//System.out.println(z.num);Fu f = new Zi();f.method4();//Fu f = new Zi();//f.method1();//f.method2();/*f.method3(); * 编译失败 * 在多态中成员函数的特点: * 在编译时期:参阅引用类型变量所属的类中是否有调用的方法。如果有, * 编译通过  没有,编译不通过 * 简单的总结就是 成员函数被调用时 编译看左边,运行看右边 *  *  * 在多态中,成员变量的特点: * 无论编译和运行,都参考左边(应用型变量所属的类)。 *  * 在多态中,静态成员函数的特点: * 无论编译和运行,都参考左边。 * *///Zi z = new Zi();//z.method1();//zi  method_1//z.method2();//fi  method_2//z.method3();//zi  method_3}}

6)多态的应用

多态主板的示例

/* * 需求: * 电脑运行实例 * 电脑运行基于主板 *///PCI接口interface PCI{void open();void close();}class MainBoard{public void run(){System.out.println("mainboard run");}public void usePCI(PCI p){if(p!=null){p.open();p.close();}}/*public void useNet( NetCard n){n.open();n.close();}*/}//网卡class NetCard implements PCI{public void open(){System.out.println("netcard  open");}public void close(){System.out.println("netcard  close");}}class SoundCard implements PCI{public void open() {System.out.println("SoundCard open");}public void close() {System.out.println("SoundCard close");}}public class DuTaiDemo5 {public static void main(String[] args) {MainBoard mb = new MainBoard();mb.run();mb.usePCI(null);mb.usePCI(new NetCard());mb.usePCI(new SoundCard());/*mb.useNet(new NetCard());*/}

数据库的示例(伪代码)

/*package day08; * 需求:数据库的操作 * 数据是:用户信息 * 1.链接数据库  JDBC  Hibernate * 2.操作数据库 * c  create   r  read  u  update   d delete *  * 3.关闭数据库链接 interface UserInfoDao{public void add(User user);public void delete(User user);}class UserInfoByJDBC extends UserInfoDao{public void add(User user){1.JDBC链接数据库;2.使用sql添加语句添加数据3.关闭链接}public void delete(User user){1.JDBC链接数据库;2.使用sql删除语句删除数据3.关闭链接}}class UserInfoByHibernate extends UserInfoDao{public void add(User user){1.Hibernate链接数据库;2.使用sql添加语句添加数据3.关闭链接}public void delete(User user){1.Hibernate链接数据库;2.使用sql删除语句删除数据3.关闭链接}}public class DuoTaiDemo2 {public static void main(String[] args) {//UserInfoByJDBC ui = new UserInfoByJDBC();//UserInfoByHibernate ui = new UserInfoByHibernate();UserInfoDao ui = new UserInfoByJDBC();ui.add(user);ui.delete(user);}}*/

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------



0 0
原创粉丝点击