Java学习之——多态

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();
		}
		
	}

}

在这里输出什么就不在写出来了。
注:转载请注明出处。个人见解,有问题请私聊本人定会虚心接受。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值