黑马程序员_多态总结
来源:互联网 发布:java soap client 编辑:程序博客网 时间:2024/05/17 18:14
----------------- android培训、java培训、期待与您交流! ----------
abstract class 动物{abstract void eat();}class Dog extends 动物{public void eat(){//骨头;}}class 猫 extends 动物{public void eat(){//吃鱼;}}class 猪 extends 动物{public void eat(){//饲料;}}class Demo{public void method(动物 x)//new Dog(); new 猫();{x.eat();}/*public void method(猫 x){x.eat();}public void method(Dog x){x.eat();}public void method(猪 x){x.eat();}*/}class Main{public static void main(String[] args){Demo d = new Demo();d.method(new Dog());d.method(new 猫());}}
动物 x = new 猫();
//猫 x = new 猫();
一。表现:
- 父类或者接口的引用指向了或者接收了自己的子类对象。
二。前提:
- 类与类之间要有关系。继承,实现。
- 通常都会有覆盖。
三。好处:
- 预先定义的程序可以运行后期程序的内容。
- 增强了程序的扩展性。
四。弊端:
- 虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能内容。
- 不能预先使用子类中定义的特有功能。
五。多态的注意事项:
- 在代码中。对于成员函数:Fu f = new Zi(); f.method();
- 编译时期:看左边。
- 运行时期:看右边。
- 因为成员函数有一个覆盖操作。
- 毕姥爷和毕老师的故事。
静态变量,静态方法。
编译和运行都看左边。
六。转型。
- 子类对象被父类引用:子类对象在向上转型。
- 将指向子类对象的父类应用转换成子类类型引用:向下转型。
毕姥爷和毕老师的故事。
class 毕姥爷
{}
class 毕老师 extends 毕姥爷
{}
毕姥爷 ly = new 毕老师();//毕老师向上转型为了毕姥爷。向上转型
毕老师 ls = (毕老师)ly; //将代表毕老师对象的父类引用ly强制转换成了毕老师类型。向下转型。
七。应用
电脑使用。主板运行。
class MainBoard{public void run(){//主板运行;}public void usePCI(PCI p)//PCI p = new NetCard();{if(p!=null){p.open();p.close();}}}//为了提高主板功能的扩展性。
//定义了规则。让后期的出现的功能板块,只要覆盖该规则,就可以被这个主板使用。
interface PCI{void open();void close();}class MainDemo{public static void main(String[] args){MainBoard mb = new MainBoard();mb.run();mb.usePCI(null);mb.usePCI(new NetCard());}}class NetCard implements PCI{public void open(){}public void close(){}}
- Object:是java中所有对象的直接或者间接的父类。
- 它里面的方法都所有对象都具备的。
- 常见方法:
- boolean equals(Object obj):用于比较两个对象是否相同。
- String toString(): 获取对象的字符串表现形式 类名@哈希值
- getClass().getName()+"@"+Integer.toHexString(hashCode());
- Class getClass():获取正在运行的对象所属的字节码文件的对象。也就是说如果Demo d = new Demo();
- d.getClass():获取的就是d执行的对象所属的字节码文件Demo.class对象。
- 通常在自定义对象时,因为对象中都有自己特有的描述,
- 所以都会建立对象自身的特有比较方法,或者字符串表现形式。
- 也就是说,会覆盖Object中的方法。
/*Demo d1 = new Demo();Demo d2 = new Demo();d1.getClass() == d2.getClass();*/class Demo //extends Object{public String toString(){this.getClass().getName()+"#"+Integer.toHexString(this.hashCode());}}class Fu{void show(){System.out.println("fu show");}}class Zi extends Fu{void function(){super.show();//this.show();}void show(){System.out.println("zi show");}}
/*class Computer{private MainBoard mb;Computer(){mb = new MainBoard();}public void play(){mb.run();}}*/
- 黑马程序员_多态总结
- 黑马程序员_多态总结
- 黑马程序员_多态总结
- 黑马程序员_多态的应用总结
- 黑马程序员_ Objective C 封装,继承,多态总结
- 黑马程序员_反射总结
- 黑马程序员_线程总结
- 黑马程序员_集合总结
- 黑马程序员_异常总结
- 黑马程序员_多线程总结
- 黑马程序员_异常总结
- 黑马程序员_线程总结
- 黑马程序员_权限总结
- 黑马程序员_数组总结
- 黑马程序员_枚举总结
- 黑马程序员_反射总结
- 黑马程序员_注解总结
- 黑马程序员_集合总结
- hdu 3342 Legal or Not ( 拓扑排序 )
- 黑马程序员——规划程序员的人生
- 黑马程序员---继承1
- 文件 I/O 函数
- TCP三次握手/四次挥手详解
- 黑马程序员_多态总结
- 黑马程序员---继承2
- c++友元函数与友元类
- 02-audio和video标签
- 黑马程序员---集合
- Java 递归
- 协同软件开发培训第四天 7-13
- 使用JDBC连接数据库的标准代码
- 互换两个变量,不使用中间变量