java黑卡_java多态

多态

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

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

体现:

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

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

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

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

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

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

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

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

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

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

ClassCastException //造型异常;

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

}

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

a5ec123e558294b5dc49212894f9ef99.png

c4e64db55feb729548151b2ede339a15.png

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

c9d17185d179739c24634018412dad9b.png

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("帅气离开");

}

}

9118eb126932d28f73607dde8bcdebe4.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值