Java学习之——多态
1.对象的类型转换
在多态的学习中,涉及到类型转换,类型转换包括两种情况:向上转型和向下转型。
1.1向上转型:
将子类对象当做父类类型使用,或者说将父类引用指向子类对象这种情况称为向上转型。例如下面两行代码:
将子类对象当做父类使用时不需要任何显式地声明,需要注意的是,此时不能通过父类变量去调用子类中某些方法,接下来通过一个例程来演示:
public class Animal {//定义一个Animal类
void shout(){
System.out.println("我是小动物");
}
}
class Cat extends Animal{//Cat为Aniaml类的子类
void shout(){
System.out.println("我是喵喵");}
void sleep(){
System.out.println("我要睡觉了");
}
}
接下来我们定义一个测试类:
public class Test {
public static void main(String[] args) {
Animal a1= new Cat();
printshout(a1);//这样写是可以的,编译时是Animal类,所以能通过printshout()方法,执行时则是Cat类,只能执行Cat中的方法,输出为“我是喵喵”
}
public static void printshout(Animal aa){//自定义的一个测试类方法
aa.shout();
aa.sleep();//这里会报错,反而是对的,因为不能通过父类去调用子类中的方法。运行时将其注释掉就行了
}
}
1.2向下转型:
将父类引用转换为子类引用的方法称为向下转型。
注意:在进行类型转换时可能会出现错误,不能进行强制转换,这时候需要用"instanceof"关键词判断,完整例子如下:
public class Animal {
void shout(){
System.out.println("我是小动物呀!");
}
}
class Cat extends Animal{
void shout(){
System.out.println("喵喵");}
void sleep(){
System.out.println("你好呀");
}
}
class Dog extends Animal{
void shout(){
System.out.println("汪汪");}
void sleep(){
System.out.println("你好");
}
}
//测试类如下:
public class Test{
public static void main(String[] args) {
Animal a1= new Cat();
Animal a2= new Dog();
printshout(a1);
printshout(a2);
}
public static void printshout(Animal animal){
if(animal instanceof Cat){
Cat a1=(Cat)animal;
a1.shout();
a1.sleep();
}
if(animal instanceof Dog){
Dog a2=(Dog)animal;
a2.shout();
a2.sleep();
}
}
}
在这里输出什么就不在写出来了。
注:转载请注明出处。个人见解,有问题请私聊本人定会虚心接受。