Java-对象转型(casting)

文章介绍了Java编程中关于对象转型的概念,包括基类引用可以指向子类对象,以及如何使用instanceof判断对象类型。同时展示了向上转型(upcasting)和向下转型(downcasting)的示例,通过TestCasting类的main方法演示了如何处理不同类型的Animal子类对象(如Cat和Dog),并展示了在方法中如何根据对象的实际类型进行操作。
摘要由CSDN通过智能技术生成

对象转型

  • 一个基类的引用类型变量可以指向其子类的对象
  • 一个基类的引用不可以访问其子类对象新增加的成员(属性,方法)
  • 可以使用 引用 变量instanceof类名 来判断该引用型变量所“指向”的对象是否属于该类或该类的子类
  • 子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之则称为向下转型(downcasting)
class Animal{
	public String name;
	Animal(String name){
		this.name = name;
	}
}
class Cat extends Animal{
	public String eyeColor;
	Dog(String n,String c){
		super(n);
		eyeColor = c;
	}
}
class Dog extends Animal{
	public String furColor;
	Dog(String n,String c){
		super(n);
		furColor = c;
	}
}

public class TestCasting {
	public static void main(String[] args) {
		Animal a = new Animal("name");
		Cat c = new Cat("catname" , "blue");
		Dog d = new Dog("dogname" , "black");
		
		System.out.println(a instanceof Animal);//true
		System.out.println(c instanceof Animal);//true
		System.out.println(d instanceof Animal);//true
		System.out.println(a instanceof Cat);//false
		
		a = new Dog("bigyellow" , "yellow");
		System.out.println(a.name);//bigyellow
		System.out.println(a.furname);//!error
		System.out.println(a instanceof Animal);//true
		System.out.println(a instanceof Dog);//true
		Dog d1 = (Dog)a;//加强制转换符
		System.out.println(d1.furColor);//yellow
	}
}

重写TestCasting,即通过基类的引用类型变量可以指向其子类的对象,实现程序的可扩展性:

public class TestCasting {
	public static void main(String[] args) {
		Test test = new Test();
		Animal a = new Animal("name");
		Cat c = new Cat("catname" , "blue");
		Dog d = new Dog("dogname" , "black");
		test.f(a);test.f(c);test.f(d);
	}
	public void f(Animal a){
		System.out.println("name:"+a.name);
		if(a instanceof Cat){
			Cat cat = (Cat)a;
			System.out.println(cat.eyeColor+" eyes");
		}else if(a instanceof Dog){
			Dog dog = (Dog)a;
			System.out.println(dog.furColor+" eyes");
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值