多态 类型转换

多态

  • 多态指的是同一个方法调用,由于对象不同可能会有不同的行为。

多态和类型转换

举个例子
Animal类是父类,里面定义了一个shout()方法
Dog类是子类,重写shout()方法
Cat类是子类,重写shout()方法
package com.ssc.polymorphism;

public class Animal {

	public void shout() {
		// TODO Auto-generated method stub
		System.out.println("叫了一声");
	}

}
class Dog extends Animal{
	
	public void shout() {
		// TODO Auto-generated method stub
		System.out.println("汪汪汪!!");
	}
	public void dogchMouse() {
		// TODO Auto-generated method stub
		System.out.println("我要抓猫!!");
	}
	public static void main(String[] args) {
		Animal uAnimal = new Dog();
		//向上类型转化后无法调用子类独有的方法
		//uAnimal.dogchMouse();
		//所以需要先向下转型,可以调用子类独有的方法
		Dog dog = (Dog)uAnimal;
		dog.dogchMouse();
	}
}
class Cat extends Animal{
	public void shout() {
		// TODO Auto-generated method stub
		System.out.println("喵喵喵!!");
	}
	public void catchMouse() {
		// TODO Auto-generated method stub
		System.out.println("我要抓老鼠!!");
	}
		
}

Test类里面定义了一个参数为Animal类的对象,在里面调用了shout方法
  • 编译的时候将uDog编译为Animal类但是指向的却是Dog类的对象,在运行的时候会调用Dog类里面的shout()方法
package com.ssc.polymorphism;

public class Test {
	static void animalCry(Animal a){
		//多态
		a.shout();
	}
	public static void main(String[] args) {
		//定一个了一个父类指向的却是子类对象
		Animal uDog = new Dog();
		animalCry(uDog);
		animalCry(new Cat());
	}
}

对象转型

public static void main(String[] args) {
		//定一个了一个父类指向的却是子类对象
		//向上转型的作用就是让编译器认为uDog是一个Animal类,但是执行的时候确是执行的Dog类对象的方法,方便使用多态
		//向上转型无法调用子类独有的方法这时候就需要向下转型了
		Animal uDog = new Dog();
		Animal uCat = new Cat();
		animalCry(uDog);
		animalCry(uCat);
		
		
		//类型转换
		//向上类型转换是自动转换//向上类型转换是自动转换
		//Animal a = (Dog)uDog;
		
		//向上类型转换是自动转换//向上类型转换是自动转换
		//向下不能这样强转
//		Dog d1 = (Dog)a;
//		uCat.catchMouse();
		
		if(uDog instanceof Dog) {
			Dog c1 = (Dog)uDog;
			c1.dogchMouse();
		}else if(uDog instanceof Cat){
			Cat d1 = (Cat)uDog;
			d1.catchMouse(); 
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值