1、在Java中可以通过子类的对象的上转型体现继承的多态性,即把子类创建的对象的引用放在一个父类的对象中,便可得到该对象的上转型,那么这个父类的对象便可访问在子类中重写的父类的方法,这就实现了上转型对象在调用方法时的多种形态。不同的上转型对象调用同一方法可能会产生不同的行为。
上转型的例子:
package test1;
class Animal{
void cry(){}
}
class Dog extends Animal{
void cry(){
System.out.println("Wang!Wang~~~~");
}
}
class Cat extends Animal{
void cry(){
System.out.println("Miao!Miao~~~");
}
}
public class Test1 {
public static void main(String args[]){
Animal animal;
animal = new Dog();
animal.cry();
animal = new Cat();
animal.cry();
}
}
2、接口回调是多态的另一种体现。指的是可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口中的方法,当接口变量调用被类实现的接口中的方法时,就通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。
接口回调的例子:
package test1;
interface Animal{
void cry();
}
class Dog implements Animal{
public void cry(){
System.out.println("Wang!Wang~~~~");
}
}
class Cat implements Animal{
public void cry(){
System.out.println("Miao!Miao~~~");
}
}
public class Test1 {
public static void main(String args[]){
Animal animal;
animal = new Dog();
animal.cry();
animal = new Cat();
animal.cry();
}
}
个人觉得接口回调和上转型很像,下面是接口和抽象类的比较。
1、抽象类和接口都可以有抽象的方法。
2、接口中只可以有常量,不能有变量;而抽象类中既可以有常量,也可以有变量。且在接口中声明的方法是不可以带实现方法的。
3、抽象类中可以有非抽象的方法,接口不可以。就是说接口中的所有方法都必须在继承的子类中实现。
注:《Java大学实用教程》学习笔记