java多态

多态

同一个对象 体现出来的多种不同形态(身份) 将同一种行为表现出不同效果;

要想实现多态的效果 需要先有继承关系

体现:

  1.父类类型的引用 指向 子类的对象

  Person p=new Teacher();//向上转型

  2.该引用只能调用父类中定义的属性和方法;

  3.如果子类中将父类的方法重写,那么调取方法后执行的结果是子类重写之后的那个结果;

  如果父类与子类有同名的属性 调用父类的属性;(属性无重写,方法可以有重写)

  如果父类与子类有同名的方法(重载) 执行子类重写之后的方法;

  4.如果想要调用子类独有属性或方法

需要将类型还原回真实类型 强制类型转化  造型  向上转型 向下转型

  Teacher t=(Teacher)p; //向下转型

  5.造型时(强制向下转型时)可能会出现一个运行时异常

    ClassCastException //造型异常;

    可以用if(p instanceof Teacher){//对象是否属于后面类型

    }

=============================================================

 

 设计模式--行为模式--策略模式;

 

public abstract class Person{	
	protected String name;
	
	public void setName(String name){
		this.name=name;
	}
	public String getName(){
		return name;
	}
	
	public abstract void callNumber();
	public abstract void transact();
	public abstract void leave();
}

 

public class Bank{
	/*
	public void welcome(OldMan om){
		System.out.println(om.getName()+"客户进入银行");
		om.callNumber();
		om.transact();
		om.leave();
	}
	
	public void welcome(YoungMan om){
		System.out.println(om.getName()+"客户进入银行");
		om.callNumber();
		om.transact();
		om.leave();
	}
	
	public void welcome(Toff om){
		System.out.println(om.getName()+"客户进入银行");
		om.callNumber();
		om.transact();
		om.leave();
	}
	*/
	public void welcome(Person om){
		System.out.println(om.getName()+"客户进入银行");
		om.callNumber();
		om.transact();
		om.leave();
	}
	
}
public class Test{
	public static void main(String[] args){
		Bank bank=new Bank();
		//Person omm=new Toff("突突");
		//Person omm=new OldMan("老张");
		Person omm=new YoungMan("少年");
		bank.welcome(omm);
		System.out.println();
		/*
		Bank bank=new Bank();
		OldMan omm=new OldMan("张大爷");
		bank.welcome(omm);
		System.out.println();
		
		
		YoungMan ommk=new YoungMan("小张");
		bank.welcome(ommk);
		System.out.println();
		
		
		Toff ommkt=new Toff("土豪");
		bank.welcome(ommkt);
		*/
	}
}

  

public class OldMan extends Person{	
	//private String name;
	public OldMan(){};
	public OldMan(String name){
		this.name=name;
	}//构造方法;
	/*
	public void setName(String name){
		this.name=name;
	}
	public String getName(){
		return name;
	}
	*/
	public void callNumber(){
		System.out.println("在哪叫号?");
	}
	public void transact(){
		System.out.println("拿出存折");
	}
	public void leave(){
		System.out.println("慢慢离开");
	}
}

  

public class YoungMan extends Person{	
	//private String name;
	public YoungMan(){};
	public YoungMan(String name){
		this.name=name;
	}//构造方法;
	/*
	public void setName(String name){
		this.name=name;
	}
	public String getName(){
		return name;
	}
	*/
	
	public void callNumber(){
		System.out.println("柜台取号");
	}
	public void transact(){
		System.out.println("拿出银行卡");
	}
	public void leave(){
		System.out.println("离开");
	}
}

  

  

public class Toff extends Person{	
	//private String name;
	public Toff(){};
	public Toff(String name){
		this.name=name;
	}//构造方法;
	/*
	public void setName(String name){
		this.name=name;
	}
	public String getName(){
		return name;
	}
	*/
	
	public void callNumber(){
		System.out.println("VIP室");
	}
	public void transact(){
		System.out.println("拿出黑卡");
	}
	public void leave(){
		System.out.println("帅气离开");
	}
}

 

越努力,越幸运!!! good good study,day day up!!!
原文地址:https://www.cnblogs.com/canglongdao/p/12878742.html