如何编写可处理父类及不同子类对象的Java方法?
统一处理boy和girl子类对象的方法实现
当然可行,下面提供两种常用实现方式:
方式一:强制类型转换
在通过instanceof判断对象类型后,将父类引用强制转换为对应的子类类型,即可访问子类独有的属性。修改后的代码如下:
public void mymethod(mother MyObject) { if (MyObject instanceof boy){ boy boyObj = (boy) MyObject; String A = boyObj.Melement; String B = boyObj.Belement; // 这里添加针对boy对象的处理逻辑 } if (MyObject instanceof girl){ girl girlObj = (girl) MyObject; String A = girlObj.Melement; String B = girlObj.Gelement; // 这里添加针对girl对象的处理逻辑 } }
这种方式简单直接,但如果后续新增更多子类,需要不断添加instanceof判断和转换逻辑,代码会逐渐臃肿,不符合面向对象的开闭原则。
方式二:利用多态(推荐)
通过在父类定义抽象方法,子类各自实现该方法的方式,让方法调用自动适配不同子类,无需手动判断类型。
- 修改父类
mother为抽象类,定义抽象处理方法:
public abstract class mother{ public String Melement; // 定义抽象方法,子类实现具体逻辑 public abstract void handleElements(); }
- 子类
boy实现抽象方法:
public class boy extends mother { public String Belement; @Override public void handleElements() { String A = this.Melement; String B = this.Belement; // 编写boy对象的具体处理逻辑 } }
- 子类
girl实现抽象方法:
public class girl extends mother{ public String Gelement; @Override public void handleElements() { String A = this.Melement; String B = this.Gelement; // 编写girl对象的具体处理逻辑 } }
- 简化后的
mymethod:
public void mymethod(mother MyObject) { MyObject.handleElements(); }
这种方式符合面向对象的多态特性,后续新增子类时,只需实现父类的抽象方法即可,无需修改mymethod的代码,扩展性更强。
内容的提问来源于stack exchange,提问作者guiguietben
相关产品推荐
相关产品推荐

