多态和抽象
多态
多态有两种理解方式:
1.对象的不同的方法可以用相同的一个方法名,也就是重载的概念。(静态多态)
2.同一对象根据不同的消息执行相应的行为,也可以这样认为发送消息给某一个对象,让对象自行选择哪种相应的行为。(动态多态)
多态的技术基础
向上转型技术:一个父类的引用变量可以指向不同的子类对象,或者说一个子对象可以被当作一个父类类型。
向上转型只能访问到父类,子类重写的方法子类独有的方法无法访问到。**
Pet dog=new Dog();
instanceof关键字:用于判断运行时对象的真正类型。
animal instanceof Dog;
动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类应运,从而实现多态性。
静态绑定:是指在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。在Java中的方法只有final、static、private和构造器是前期绑定
向下转型:
public class AnimalUtil {//喂养宠物
public void fun(Animal animal){
animal.eat();
if (animal instanceof Dog) {
Dog d=(Dog)animal;
d.dogSay();
}else if (animal instanceof Cat) {
Cat c=(Cat)animal;
c.catSay();
}
}
}
多态参数
当方法的某个形式参数是一个引用的时候,与该引用兼容的任何对象都可以传递给方法,从而允许方法接受不同数据类型的形式参数。
public void eat(People p){
}
多态总结
使用父类类型的引用指向子类的对象。
该引用只能调用父类中的方法,不能调用子类中独有的方法。
如果子类中重写了父类中的一个方法,参调用这个方法的时候,将会调用子类中的这个方法。
在多态中,子类可以调用父类中的所有方法。
抽象
抽象方法:只声明不实现的方法(用关键字abstract)
抽象方法必须在抽象类中
子类必须实现(重写)抽象方法,除非子类本身也是抽象的。
抽象类不能直接实例化。**

浙公网安备 33010602011771号