多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。
简单理解起来就是同一名字的方法在不同对象里会用不同的实现。
public class DemonSlayer{ protected String breathMethord; protected String name;//可被子类访问的属性:姓名,呼吸法 public DemonSlayer() { this.breathMethord = "DemonSlayer"; this.name = "DemonSlayer"; }//封装 public String getBreathMethord() { return this.breathMethord; } public String getName() { return this.name; } public void selfIntroduct() { System.out.println("I‘m Demon Slayer."); }//父类方法 }
之后是两个子类
public class Kamado extends DemonSlayer{ kamado(){ breathMethord = "Breath of water"; name = "Kamado"; } public void selfIntroduct() { System.out.println("I‘m Kamado."); }//重写 }
public class Agatsuma extends DemonSlayer{ Agatsuma(){ breathMethord = "breath of thunder"; name = "Agatsuma"; } public void selfIntroduct() { super.SelfIntroduct();//调用基类的方法 System.out.println("I‘m Agatsuma."); } }
测试函数
public class Test{ public void partner(DemonSlayer a) { System.out.println(a.getName() + ":" + a.getBreathMethord()); } public static void main(String[] args) { DemonSlayer demon = new DemonSlayer();//新建对象 demon.selfIntroduct(); DemonSlayer kamado = new Kamado();//新建对象,向上转型 kamado.selfIntroduct(); DemonSlayer agatsuma = new Agatsuma();//新建对象 Agatsuma b = (Agatsuma(agatsuma));//向下转型 b.selfIntroduct(); partner(demon); partner(kamado); partner(agatsuma); } }
继承、重写和向上转型。只有满足这 3 个条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。
在多态中必须存在有继承关系的子类和父类。
子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。
另一种向下转型也是得以对象之前向上转型过为前提
原文:https://www.cnblogs.com/yus-1994/p/12836511.html