---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
Java引用变量有两种类型:一个是编译时的类型,一个是运行时的类型。当两个类型不一致时,就产生了多态
class DuoTaiDemo
{
public static void function(Cat cat1)
{
cat1.eat();
}
public static void main(String[] args)
{
function(new Cat());
}
}
abstract class Animal
{
abstract void eat();
}
class Cat extends Animal
{
public void eat()
{
System.out.println("吃鱼");
}
}
class Dog extends Animal
{
public void eat()
{
System.out.println("吃骨头");
}
}
/*
如果我们以后想要添加一个猪(pig)的类必须再添加一个方法
我们可以将function方法改为
public static void function(Animal animal)
{
animal.eat();
}
*/
编写Java程序时,引用变量只能调用它编译时类型的方法,而不能调用运行时的方法。如果需要这个引用变量来调用它运行时类型的方法,则必须把它强制类型转换成运行时类型。
引用类型之间的转换只能把一个父类变量转换成子类类型。没有任何继承关系的类型,则无法进行类型转换。
class DuoTaiDemo2
{
public static void main(String[] args)
{
Parent p=new Child();
p.show();//子类方法一
((Child)p).show_1();//子类方法二
}
}
class Parent
{
public void show()
{
System.out.println("父类方法!");
}
}
class Child extends Parent
{
public void show()
{
System.out.println("子类方法一!");
}
public void show_1()
{
System.out.println("子类方法二");
}
}
- instanceof运算符
考虑到进行强制转换可能出席那异常,因此进行类型转换之前应先通过instanceof运算符来判断是否可以转换成功
if (p instanceof Child)
{
Child c=(Child)p;
c.show_1();
}
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------