zoukankan      html  css  js  c++  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("类型不符");
    		}
    		
    		
    		
    		
    		
    	}
    
    }
    

      

  • 相关阅读:
    Git_学习_05_ 解决冲突
    Git_学习_04_ 多人协作开发的过程
    PostgreSQL与Oracle对应的函数
    Mysql学习_02_mysql数据导入导出
    【SPOJ】1812. Longest Common Substring II(后缀自动机)
    【BZOJ】2555: SubString(后缀自动机)
    【BZOJ】3172: [Tjoi2013]单词(后缀自动机)
    【SPOJ】8222. Substrings(后缀自动机)
    【wikioi】3160 最长公共子串(后缀自动机)
    【BZOJ】1079: [SCOI2008]着色方案(dp+特殊的技巧)
  • 原文地址:https://www.cnblogs.com/liuyanzeng/p/5893818.html
Copyright © 2011-2022 走看看