首页 > 代码库 > java 多态

java 多态

写一个father类,里面有两个属性和一个work方法,输出一句话。一个father的子类son重写work方法,并且还自己有一个sing方法用向上转型和向下转型测试

package liu0921;public class Father {		//属性	private String name;	private int age;	//方法	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}			public Father(String name) {		super();		this.name = name;	}	public Father() {		super();	}		//方法	//default 不能被别的包的类访问	//protected 保护的其他包的子类内部可以访问	public void Work()	{		System.out.println("我劳动,我光荣");	}	}

  

package liu0921;public class Son extends Father{	//重写	public void Work()	{		System.out.println("我要上天!");	}		public void sing()	{		System.out.println("喜欢唱歌");	}}

  

package liu0921;public class Ceshi_father {	public static void main(String[] args) {		Son s1=new Son();		s1.Work();		s1.sing();		s1.setName("张三");		System.out.println(s1.getName());		//向上转型		//多态的表现  		//隐式转换		Father f1=new Son();//子类转成父类		//如果方法被子类重写了那就调用子类的重写的方法		f1.Work();				//向下转型		//一般在向下转型之前必须先进行向上转型		//Son s2=new Father();//类型不匹配:不能从 Father 转换为 Son		Son s2=(Son)f1;//f1实则是父类的实例		s2.sing();				//能装下所有类型的数据类型		//instanceof 测试它左边的对象是否是它右边的类的实例		Object obj=new Father();		Object[] ary=new Object [5];						ary[0]=123;		ary[1]="abc";		ary[2]=f1;		ary[3]=new Father();		ary[4]=s1;				if(ary[3] instanceof Son)//ary[3]不是son的子类所以返回类型不符,ary[4]中的s1是,所以可以输出son中的方法		{		Son obj2=(Son)ary[4];		obj2.sing();		obj2.Work();		}		else		{			System.out.println("类型不符");		}											}}

  技术分享

 

java 多态