面向对象第5课——转型

package zhuanxing;
 									///转型课件(在继承的基础上转型)
public class father {
	public void work()
	{
		System.out.println("我劳动我光荣");
	}

}



package zhuanxing;

public class son extends father {
	//父类方法的重写
	public void work()
	{
		System.out.println("我不想工作");
		
	}
	public void sing()
	{
		System.out.println("我喜欢唱歌");
	}
	//当不确定是什么类型时用Object然后在向下转型
	public Object geto()
	{
		return "123456";
	}

}



package zhuanxing;

public class fathertest {

	public static void main(String[] args) {
		

		father f=new father();
		son s=new son();
		s.work();
		//向上转型,左到右,son转成father,(最上方是原始类)
		father f1=new son();
		f1.work();
	//f1.sing(); 错误, 不可以继承多余father的东西
		//向下转型
		son s1=(son)f1;
		s1.work();
		s1.sing();

		//Object能装下所有类型的数据类型,先向上转型,在向下转型
		//向上转
		Object obj=new father();
		Object[] ary=new Object[5];
		ary[0]=123;
		ary[1]="asd";
		ary[2]=new father();
		ary[3]=f1;
		ary[4]=s1;
		//向下转
		//判断instanceof,判断x,是不是y对象的类型
		if(ary[4] instanceof son)
		{	
		son obj1=(son)ary[4];
		obj1.sing();
		}
		else
		{
		System.out.println("类型不符");	
		}
		
//		if(ary[2] instanceof father)
//		{	
//			son obj1=(son)ary[2];
//			obj1.work();
//		}
//		else
//		{
//			System.out.println("类型不符");	
//		}
		//泛型
	}

}
									//转型总结
//转型:
//	      向上转型——隐式转换——把子类对象转换成父类(1.隐藏了子类自己的成员和方法,只能访问到父类的成员和方法。2.如果在子类中父类的方法被重写就调用子类中的重写方法)
//	      向下转型——强制转    ——把父类对象转换成子类(1.一般先有向上转型为前提,才可以进行向下转型。2.如果类型不符或不是子类,就会转换失败,可以用instanceof判断)
//转型也是多态的一种表现形式
//操作符(instanceof):格式为:实例   instanceof 类名,返回结果:该实例是否是该类或子类的实例。
                                     //final关键字(终态的)
//可以放到变量前面,表示常量,只能被赋值一次
//放到lcass(类)的前面,类不可以被继承
//放到方法前,不能被继承,重写覆盖。
//放到构造方法前不可以,不可以被重写。

  

原文地址:https://www.cnblogs.com/zhangnaitao/p/5907904.html