对象转型

对象转型(casting):

1:一个基类的引用类型变量可以“指向”其子类的对象。
2:一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。
3:可以使用 引用 变量instanceof类名 来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。
4:子类的对象可以当做基类的对象来使用乘坐向上转型(upcasting),反之称为向下转型(downcasting)

实例:

class	Animal{
	public	String	name;
	Animal (String	name){
		this.name = name;
	}
}

class	Cat	extends	Animal{
	public	String	furColor;
	Dog(String n, String  c) {
		super (n);
		furColor = c; 
	}
}

public	class	Test{
	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")		//a是父类的引用,但是指向子类(Dog)
		System.out.println(a.name);		//bigyellow	
		System.out.println( a.furname );		//无法打印
		System.out.println(a	instanceof	Animal );		//true
		System.out.println(a	instanceof	Dog);		//true

		Dog		d1 = (Dog)a;		//要加强制转换符,这样d1就指向了子类(Dog)。但是Dog无法强制转换为Cat
		System.out.println(d1.furColor);		//yellow
	}
}

实例二:

public	class	Test {
	public	static	void	main(String [] args){	
		Test	test = new	Test();
		Animal	a = new	Cat("name");
		Cat	c = new	Cat ("catname" , "black");
		Dog	d = new	Dog("dogname" , "black");
		test.f(a) ;
		test.f(b) ;
		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+" fur ")
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43505709/article/details/84672637