首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在不知道子类的情况下,在getter方法中返回子类

是指在父类中定义一个getter方法,该方法返回一个子类的实例,但是在父类中并不知道具体返回的是哪个子类的实例。

这种情况下,可以使用工厂模式来实现。工厂模式是一种创建对象的设计模式,它将对象的创建过程封装在一个工厂类中,通过调用工厂类的方法来创建对象。在这种情况下,可以在父类中定义一个工厂方法,该方法根据一定的条件来创建并返回子类的实例。

下面是一个示例代码:

代码语言:txt
复制
public abstract class ParentClass {
    public abstract ChildClass createChild();

    public void someMethod() {
        ChildClass child = createChild();
        // 使用子类的实例进行操作
    }
}

public class ChildClass extends ParentClass {
    @Override
    public ChildClass createChild() {
        return new ChildClass();
    }
}

在上面的示例代码中,ParentClass是父类,ChildClass是子类。父类中定义了一个抽象方法createChild(),该方法返回一个ChildClass的实例。子类ChildClass实现了createChild()方法,返回自身的实例。

通过这种方式,在父类中可以调用createChild()方法来获取子类的实例,而不需要知道具体是哪个子类的实例。

这种设计模式的优势是可以提高代码的灵活性和可扩展性。在应用场景中,当需要根据不同的条件返回不同的子类实例时,可以通过工厂模式来实现。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于使用MethodHandle子类调用祖父类重写方法探究

关于使用MethodHandle子类调用祖父类重写方法探究 注:这个例子原本出现在周志明先生《深入理解Java虚拟机》--虚拟机字节码执行引擎章节,介于有读者朋友有疑问,这里基于Java代码层面解释一下...由于找到thinking方法是非static,需要一个隐式入参(也就是栈帧中局部变量表第0个位置this参数),java这叫做该方法接收者。...普通方法调用,这个this参数是虚拟机自动处理,表示是当前实例对象,我们方法可以直接使用。...我觉得使用bindTo绑定方法接收者要比invoke方法传递更加友好,也更加符合程序员大众理解,invoke可以只专注方法显式入参。 然后再来说bindTo(this)this。...这个参数中指定方法接收者类型,bindTo指定接收者类型必须要是这个类或子类,不然会出现ClassCastException异常。

9.5K30

关于子类继承父类属性和方法基础上如何增加子类属性和方法

1 问题 如何用python程序实现子类继承父类属性和方法基础上同时增加子类自己属性和方法? 2 方法 用super().函数调用父类属性。...) print(' ')class Stuff(Boss):#继承父类属性 def __init__(self,name,age,gender,position,salary):#子类添加自己属性...self.salary=salary def stuff_print(self): print(' ') super().boss_print()#用super().调用父类方法...,'jixiangwu',1000000000000)bo.tiancai_print()st1.stuff_print()st2.stuff_print() 3 结语 对如何用python程序实现子类继承父类属性和方法基础上同时增加子类自己属性和方法问题...通过子类添加自己属性,用super().函数调用父类属性,证明了该方法是有效

17930
  • 创建子类对象时,父类构造函数调用被子类重写方法为什么调用子类方法

    static void main(String[] args) { A a = new A(); B b = new B(); } } 问题:为什么创建A对象时候父类会调用子类方法...但是:创建B对象父类会调用父类方法? 答案: 当子类被加载到内存方法区后,会继续加载父类到内存。...如果,子类重写了父类方法子类方法引用会指向子类方法,否则子类方法引用会指向父类方法引用。 如果子类重载了父类方法,则子类重载方法引用还指向子类方法。...如果子类方法没有重写也没有重载父类方法,则方法引用会指向父类方法。 当子类对象创建时,会先行调用父类构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...其结果是当编译时候,父类构造方法调用方法参数已经强制转换为符合父类方法参数了。 上边代码在编译前已经转换为下面这个样子了。

    6.2K10

    Python 子类调用父类方法详解(单继承、多层继承、多重继承)

    测试环境: win7 64位 Python版本:Python 3.3.5 代码实践: 1、子类通过“类名”调用父类方法 class FatherA: def __init__(self)...__init__(self) # 子类调用父类方法:父类名.方法名称(参数) if __name__ == '__main__': b = SubClassB() 运行结果: >>> ==...(如类SubClassB父类由FatherA变为FatherD时),必须遍历整个类定义,把子类中所有的父类类名全部替换过来 2、子类通过“super”方法调用父类方法 场景1、单层继承 class...__init__() # 子类调用父类方法:super().方法名称(参数) if __name__ == '__main__': b = SubClassB() class FatherA...__init__() # 子类调用父类方法:super(type, obj).方法名称(参数) if __name__ == '__main__': b = SubClassB() 运行结果

    3.1K30

    Java静态方法不能被子类重写

    参考链接: 可以Java重载或重写静态方法吗 Java静态方法不能被子类重写 特点:静态方法属于类方法,也属于对象方法,但是静态方法随类存在。...结论:Java静态方法不能被子类重写,实际上,子类静态方法隐藏了父类静态方法,因此父类子类静态方法同时存在,只不过父类通过类名(或对象名)调用是父类静态方法子类通过类名(或对象名)调用子类静态方法...,不支持多态,所以此处调用父类静态方法         f1.doWork();            // 非static(静态)方法调用,支持多态         System.out.println...(final,private 方法也如此) (2)静态方法可通过类名直接调用,也可通过类实例化对象调用,因此Father 实例化对象f1调用是父类(不是子类静态方法。...(3)静态方法绑定时期为代码编译器期,也叫前期绑定。非静态方法属于程序执行期绑定,也就运行期绑定。

    2.2K20

    C# 基类定义好方法子类继承接口就能实现

    C# 里面,接口定义只需要类里面存在和接口声明相同方法或属性就可以,而存在方法或属性是子类定义还是基类里面定义都无所谓。...也就是基类里面写好了方法,但不继承接口,等子类继承接口时候就不需要子类实现方法。...通过这样方法可以基类里面添加一些辅助方法,而这些方法默认不给子类开启,除非子类继承了接口 基类定义方法,如果在子类继承接口里面声明方法刚好和基类定义相同,那么子类可以不需要再次定义。...基类可以判断当前自己类型是否继承了接口 这个方法用在基类里面期望特定代码里面给子类暴露一些内部方法,但是又不能让子类随意调用。...,因为我期望这个方法只有我才能调用 那么假如我有一个 Foo 接口里面就需要使用到对应方法,而默认业务想要返回方法是基类定义上面的方法 public interface IFoo

    57320

    NHibernate单表继承模式下通过父类Repository查询子类

    NHibernate中经常遇到继承与关系数据库ORMapping问题,我之前一篇博客(http://www.cnblogs.com/studyzy/archive/2011/08/16/2140675...使用单表继承可以不用Join多个表查询效率高,而且Domain Model属性提示到父类或者下降到子类时,数据库模型不用更改。...NHibernate中经常会遇到通过父类Repository来查询子类情况,比如现在有一个抽象Employee对象,下面有OfficeUser和Teacher两个具体对象,这两个对象都有其特有的属性...必须这么写,不能写成大写Class,也不能换成其他字,只有这样才能让NHibernate理解,并正确返回结果。...以上是以最简单了例子说明了如果通过父类查询具体子类方法,实际项目中肯定比这个查询要复杂,但是只要记住了这三种查询要点,结合其他条件就可以写出NHibernate能够理解查询。

    34420

    Java为什么不同返回类型不算方法重载?

    方法签名组成规则我们可以看出,方法返回类型不是方法签名组成部分,所以当同一个类中出现了多个方法名和参数相同,但返回值类型不同方法时,JVM 就没办法通过方法签名来判断到底要调用哪个方法了,如下图所示...: 那为什么返回类型不能做为方法签名一部分呢?...,所以方法返回类型不能作为方法签名一部分。...总结 同一个类定义了多个同名方法,但每个方法参数类型或者是参数个数不同就是方法重载。方法重载典型使用场景是 String valueOf 方法,它有 9 种实现。...方法返回类型不能作为方法重载依据,因为它不是方法签名组成部分。

    3.4K10

    【C++】继承 ⑩ ( 继承机制 static 静态成员 | 子类访问父类静态成员方法 )

    派生类 ) 共享 ; 2、父类静态成员访问控制权限改变 继承自 父类 静态成员变量 , 仍然遵循 继承 子类 访问控制特性 , public 公有继承 : 父类成员 子类 , 访问控制权限...不变 , 共有 和 保护成员 可以子类访问 , 私有成员不可在子类访问 ; 父类 public 成员 仍然是 public 成员 ; 父类 protected 成员 仍然是 protected...成员 ; 父类 private 成员 仍然是 private 成员 ; protected 保护继承 : 父类成员 子类 , 访问控制权限 变为 protected , 基类 公有成员...和 保护成员 可以子类访问 , 私有成员不可在子类访问 ; 父类 public 成员 变为 子类 protected 成员 ; 父类 protected 成员 仍然是 protected...成员 ; 父类 private 成员 仍然是 private 成员 ; private 私有继承 : 父类成员 子类 , 所有成员访问控制权限 变为 private , 基类 所有成员

    41910

    一个简单方法:截取子类名称不包含基类后缀部分

    代码,我们可能会为了能够一眼看清类之间继承(从属)关系而在子类名称后缀带上基类名称。但是由于这种情况下基类不参与实际业务,所以对外(文件/网络)名称通常不需要带上这个后缀。...本文提供一个简单方法,让子类基类后缀删掉,只取得前面的那部分。 在这段代码,我们至少需要获得两个传入参数,一个是基类名称,一个是子类名称。...33 using System; namespace Walterlv.Utils { /// /// 包含类名相关处理方法。...,则直接返回子类名称。...截取完子串之后,我们还需要验证截取字符串是否已经是空串了,因为父子类名称可能是完全一样(虽然这样做法真的很逗比)。

    22430

    c++获取子类窗口句柄位置_C++各种获取窗口句柄方法「建议收藏」

    z序(Z序:垂直屏幕方向,即叠放次序),并返回z序顶部子窗口句柄。...返回值: 如果函数成功,返回值为Z序顶部子窗口句柄。如果指定窗口无子窗口,返回值为NULL。 GetForegroundWindow 函数功能:该函数返回当前系统前台窗口窗口句柄。...GetActiveWindow 函数功能:该函数可以获得与调用该方法线程消息队列相关活动窗口窗口句柄(就是取得当前进程活动窗口窗口句柄)。...GetSafeHwnd 函数功能:获取某个窗口对象(CWnd派生对象)指针句柄(HWND)时,最安全方法是使用GetSafeHwnd()函数。...这个原子(一个16bit值),必须被放置lpClassName低位字节,lpClassName高位字节置零。

    2.4K30

    React 16 从 setState 返回 null 妙用

    概述 React 16 为了防止不必要 DOM 更新,允许你决定是否让 .setState 更来新状态。调用 .setState 时返回 null 将不再触发更新。...React 16 对状态性能进行了改进,如果新状态值与其现有值相同的话,通过 setState 返回 null 来防止来触发更新。 ?...解决方案 以下是我们将要遵循步骤,来防止不必要重新渲染: 检查新状态值是否与现有值相同 如果值相同,我们将返回 null 返回 null 将不会更新状态和触发组件重新渲染 首先, app 组件...updateMocktail 方法,创建一个名为 newMocktail 常量,并用传入 mocktail 值为其赋值。...总结 本文介绍了 React 16 怎样从 setState 返回 null。我在下面的 CodeSandbox 添加了 mocktail 选择程序完整代码,供你使用和 fork。

    14.5K20
    领券