在设计一个方法时,通常希望该方法具备一定的通用性。java中,在同一个方法中,由于参数类型不同而导致执行效果各异的现象就是多态。
java中提供一个关键字instanceof,它可以判断一个对象是否为某个类(或接口)的实例或者子类实例,
在java中为了实现多态,允许使用一个
父类类型的变量来
引用一个
子类类型的对象,根据被引用子类对象特征的不同,得到不同的运行结果。
例子:
interface Animal
{
void shout();
}
class Cat implements Animal
{
public void shout(){
System.out.println("喵喵。。。。");
}
}
class Dog implements Animal
{
public void shout(){
System.out.println("汪汪。。。。");
}
}
class Example
{
public static void main(String[] args)
{
Animal an1=new Cat(); //将Cat对象当作Animal类型来使用,属于对象的类型转换,不需要任何显式声明
Animal an2=new Dog(); //
此时不能通过父类变量去调用子类中的某些方法,如例2
animalShout(an1);
animalShout(an2);
}
public static void animalShout(Animal an){
an.shout();
}
}
运行结果:
喵喵。。。。
汪汪。。。。
例2
interface Animal
{
void shout();
}
class Cat implements Animal
{
public void shout(){
System.out.println("喵喵。。。。");
}
public void sleep(){ //Animal里面没有这个方法
System.out.println("喵咪在睡觉。。。。");
}
}
class Example
{
public static void main(String[] args)
{
Cat an1=new Cat();
animalShout(an1);
}
public static void animalShout(Animal an){ //an父类变量
an.shout(); //若上一行加一句 Cat an1=(Cat)an;则可以通过编译,但这种方法不推荐使用
an.sleep(); //子类的方法
}
}
运行结果:
java中提供一个关键字instanceof,它可以判断一个对象是否为某个类(或接口)的实例或者子类实例,
格式:
对象 instanceof 类或接口
故上面可以用
if(animal instanceof cat)
来判断animal是否是Cat类的实例对象