面向对象 多态 需求 object
1、多态:事物存在的多种体现形态
2、1)多态的体现
父类的引用指向了自己的子类对象
2)多态的前提
必须是类与类之间有关系,要么继承,要么实现
通常还有一个前提:存在覆盖。
3)多态的好处
多态的出现大大的提高程序的扩展性
4)多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类中的成员
5)多态的应用
6)多态的出现代码中的特点(多态使用的注意事项)
3、 总-分-调用分
abstract class animal
{
abstract void eat();
}
---
class cat extends animal
{
//重写
public void eat()
{
System.out.println("吃鱼");
}
//其他方法
public void catchMouse(){}
}
---
public static void function(animal a){}//animal a=new cat();
...
class
{
public static void main(String[] args)
{
//function(new cat());
animal c=new cat();//应用数据类型提升,向上转型
c.eat();
//如果想要调用猫的特有方法时,如何操作
//cat c1=new cat();这样就有创建了一个新的对象,增加的内存、
同时逻辑上可能出现差错
//强制将父类的引用,转成子类类型
cat c=(cat)c;//向下转型
c.catchMouse();
//千万不要出现这样的操作:animal c=new animal();cat c=
(cat)c;这是错误操作
}
}
4、注:我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可
以被强制转换。
多态至始至终都是子类对象在做着变化
5、classCartException类型转换异常
判断引用类型是否正确
public void function(animal a)
{
if(a instanceof cat){}
else if(a instanceof dog){}
...
}
6、(常见)在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译
通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结:成员函数在多态调用时,编译看左边,运行看右边
7、(面试)在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)
例
class fu
{
int num=5;
}
class zi extends fu
{
int num=8;
}
fu f=new zi();
zi z=new zi();
s.o.p(f.num);//5
s.o.p(z.num);//8
2)在多态中,静态(static)成员函数的特点:
无论编译和运行,都参考左边。
8、需求:
1)电脑运行实例:基于主板。
2)数据库的操作:连接、操作(CRUD create read update delete)、关闭
接口:降低了程序耦合性
多态:增加的程序的扩展性
9、Object
equals():比较的是地址
如果自定义类中也有比较相同的功能,没有必要重新定义。
只要沿袭父类中的功能,建立自己特有比较内容即可,这就是覆盖。
.toString()相当于.getName+"@"+Integer.toHexString(hashcode())
|
|