关于Java中向上转型与向下转型

1.向上转型(upcasting)子类转父类

2.向上转型(downcasting)父类转子类

PS:无论是向上转型还是向下转型,两个类之间必须要有继承关系

3.多态的好处是什么?

1.0项目拓展能力强
1.1使用多态可以使代码之间耦合度降低
向上转型代码
  • 父类型引用指向子类型对象
  • 子类转父类也称为自动类型转型
  • 程序分为两个阶段:编译、运行阶段
  • 编译阶段只知道animalCat是一个Animal类型
  • 运行阶段在堆中实际对象是Cat类型
  • 列如:

Animal animalCat = new Cat();
animalCat.eat();

/*
*测试类
*/
public class Test {
public static void main(String[] args) {
	Animal animal=new Dog();//
		animal.eat();
}
}
/*
*动物类
*/
public class Animal {
	public void eat() {
		System.out.println("动物在吃");
	}
}
/*
*猫类继承动物类
*/
public class Cat extends Animal{
	//重写
	public void eat() {
		System.out.println("猫在吃");
	}
}
/*
*狗类继承动物类
*/
public class Dog extends Animal {
	//重写
	public void eat() {
		System.out.println("狗在吃");
	}
	public void move(){
		System.out.println("狗在睡觉");
	}
}

执行代码则会出现 狗在吃

向下转型(强制类型转换)
  • 进行强制转换需要加上强制类型转换符
  • 在做强制类型转换是有风险的
  • 为了避免java.lang.ClassCastException的发生 Java引入了"instanceof"关键字
  • instanceof运算符的运算结果是boolean类型
  • 用法 instanceof用法(引用 instanceof 类型)–true/false 列如:(dogAnimalinstanceof Cat)如果结果是true表示:dogAnimal引用指向 堆中的对象是Cat类型
public class TestPolymorphism {
	public static void main(String[] args) {
			Animal animal = new Dog();//animal引用指向Dog对象
		if (animal instanceof Dog) {//判断类型是否属于堆中类型对象“true”指向判断语句。“flase”不执行判断语句
			Dog dog=(Dog)animal;//向下转型
			dog.move();
		}
	}
}
/*
*动物类
*/
public class Animal {
	public void eat() {
		System.out.println("动物在吃");
	}
}
/*
*猫类继承动物类
*/
public class Cat extends Animal{
	//重写
	public void eat() {
		System.out.println("猫在吃");
	}
}
/*
*狗类继承动物类
*/
public class Dog extends Animal {
	//重写
	public void eat() {
		System.out.println("狗在吃");
	}
	public void move(){
		System.out.println("狗在睡觉");
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值