首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实现继承无父类或接口

实现继承无父类或接口
EN

Stack Overflow用户
提问于 2016-02-25 05:21:45
回答 2查看 28关注 0票数 2

我有以下两种方法:

代码语言:javascript
运行
AI代码解释
复制
void m1(SourceClass s, ClassA a);
void m2(SourceClass s, ClassB b);

ClassA和ClassB实际上共享一些共同的属性,但是,我们不能编写另一个父类&让ClassA & ClassB继承父类,因为ClassA & ClassB不在我们的控制范围之内。

问:没有重复的代码,如果ClassA ...否则如果ClassB ..。为了达到编写继承的新父类的效果,处理这种情况的最佳方法是什么?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-02-25 05:37:42

有一个非常好的设计模式Decorator Design可以解决以下问题:

  • 动态地将附加职责附加到对象。装饰器为通过递归包装核心对象来扩展functionality
  • Client-specified核心对象的装饰提供了一种灵活的子类化方法。
  • 包装礼物,将其放入盒子中,然后再包装盒子。

注意:Strategy Design Pattern之后的单独类中提取公共代码段,并动态地更改对象的行为。

例如:

代码语言:javascript
运行
AI代码解释
复制
public class CommonSteps {

   public void perform() {
      System.out.println("common steps");
   }
}

public class A{
   private CommonSteps commonSteps;
   public A(CommonSteps commonSteps) {
      this.commonSteps = commonSteps;
   }
   public void action() {
      System.out.println("some steps of class A");
      commonSteps.perform();
      System.out.println("some more steps of class A");
   }
}

public class B{
   private CommonSteps commonSteps;
   public B(CommonSteps commonSteps) {
      this.commonSteps = commonSteps;
   }
   public void action() {
      System.out.println("some steps of class B");
      commonSteps.perform();
      System.out.println("some more steps of class B");
   }
}

编辑:

以下是根据您的需求和步骤提供的完整示例代码:

步骤:

创建具有公共方法签名的接口Wrapper

代码语言:javascript
运行
AI代码解释
复制
interface Wrapper {
    void setP1(String p1); 
    void setP2(String p2);
} 

创建类特定的Wrapper接口实现,如下所示。

代码语言:javascript
运行
AI代码解释
复制
class ClassAWrapper implements Wrapper{
    ClassA classA;
    ClassAWrapper(ClassA classA){
        this.classA = classA;
    }
    @Override
    public void setP1(String p1)
    {
        classA.setP1(p1);
    }
    @Override
    public void setP2(String p2)
    {
        classA.setP2(p2);
    }
}

现在将方法签名更改为

代码语言:javascript
运行
AI代码解释
复制
void m(SourceClass s, Wrapper w) {
    w.setP1(s.getP1()); 
    w.setP2(s.getP2());
} 

问题已解决

**完整代码:

代码语言:javascript
运行
AI代码解释
复制
interface Wrapper {
    void setP1(String p1); 
    void setP2(String p2);
}

class ClassAWrapper implements Wrapper{
    ClassA classA;
    ClassAWrapper(ClassA classA){
        this.classA = classA;
    }
    @Override
    public void setP1(String p1)
    {
        classA.setP1(p1);
    }
    @Override
    public void setP2(String p2)
    {
        classA.setP2(p2);
    }
}

class ClassBWrapper implements Wrapper{
    ClassB classB;
    ClassBWrapper(ClassB classB){
        this.classB = classB;
    }
    @Override
    public void setP1(String p1)
    {
        classB.setP1(p1);
    }
    @Override
    public void setP2(String p2)
    {
        classB.setP2(p2);
    }
}

class ClassA {
    void setP1(String p1) {
        System.out.println("ClassA - " + p1);
    }

    void setP2(String p2) {
        System.out.println("ClassA - " + p2);
    }
}

class ClassB {
    void setP1(String p1) {
        System.out.println("ClassB - " + p1);
    }

    void setP2(String p2) {
        System.out.println("ClassB - " + p2);
    }
}

class SourceClass {
    String getP1() {
        return "p1";
    }

    String getP2() {
        return "p2";
    }
}

void m(SourceClass s, Wrapper w) {
    w.setP1(s.getP1()); 
    w.setP2(s.getP2());
} 
票数 0
EN

Stack Overflow用户

发布于 2016-02-25 05:37:46

为什么不简单地测试instanceof呢?

例如:

代码语言:javascript
运行
AI代码解释
复制
void m (SourceClass s, Object a_or_b) {

    if (a_or_b instanceof ClassA) {
        // do blahA
    }
    if (a_or_b instanceof ClassB) {
        // do blahB
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35619005

复制
相关文章
在 JavaScript 中如何克隆对象?
我们假设一个变量 name 具有一个与之关联的原始值(number,string,boolean,undefined 和null)。 如果我们将此变量 name 复制到另一个变量name2 ,则原始变量的任何修改都不会影响到第二个变量,因为它们是原始值。
前端小智@大迁世界
2022/06/15
4.9K0
触发器在渗透中的利用
0x01 什么是触发器: 触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作。诸如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。 0x02 问题描述: a)通
逸鹏
2018/04/09
1.5K0
触发器在渗透中的利用
详解JavaScript之神奇的Object.defineProperty
摘要: JavaScript有个很神奇的Object.defineProperty(),了解一下?
Fundebug
2018/07/05
6060
在 Kubernetes 中,如何动态配置本地存储?
Kubernetes 中使用节点的本地存储资源有 emptyDir、hostPath、Local PV 等几种方式。这之中,emptyDir 无法持久化数据,hostPath 方式需要手动管理卷的生命周期,运维压力大。因此在某些场景下,如果用户出于性能和运维成本考虑需要使用本地存储,Local PV 似乎是唯一选择。
CNCF
2019/12/05
3.5K0
在 Kubernetes 中,如何动态配置本地存储?
95 - 在Flask中如何使用动态路由
1. 静态路由和动态路由有什么区别? 路由 Utl Path http://loaclhost/abc/test.html 静态路由 Path与路由函数一一对应 动态路由 多个Path与同一个路由函数对应 http://loaclhost/abc/test.html http://loaclhost/xyz/test.html 不管访问哪一个Url,都会执行同一个服务端的路由函数 2. 如何使用Flask实现动态路由 ''' pip install flack ''' from flask import
ruochen
2021/06/27
5.6K0
95 - 在Flask中如何使用动态路由
在 Kubernetes 中,如何动态配置本地存储?
Kubernetes 中使用节点的本地存储资源有 emptyDir、hostPath、Local PV 等几种方式。这之中,emptyDir 无法持久化数据,hostPath 方式需要手动管理卷的生命周期,运维压力大。因此在某些场景下,如果用户出于性能和运维成本考虑需要使用本地存储,Local PV 似乎是唯一选择。
kubernetes中文社区
2019/08/27
3.2K0
在 Kubernetes 中,如何动态配置本地存储?
【译】如何避免在JavaScript中阻塞DOM
原文链接:https://www.sitepoint.com/avoiding-dom-blocking/
腾讯IVWEB团队
2020/06/28
2.9K0
JavaScript中动态生成表格
行:<input type="text" id="row" value="5"><br>
马克社区
2022/04/19
2.1K0
在直播app制作过程中,服务器是如何配置的?
不论是一对多直播还是一对一直播app制作,关于服务器的配置和成本是大多数运营商比较关心和头疼的问题。一般来说,在直播app运营的每个阶段,所安排的服务器台数和负责的功能都是不一样的。那么如何在有限的成本中搭配出高效的服务器模组?针对这个问题,小编今天就给各位初入直播行业的运营商说明一下。
就爱吃小笼包
2019/09/26
2K0
在直播app制作过程中,服务器是如何配置的?
利用PPT如何设计制作创意相框
很多人都希望自己的PPT能够独具匠心,在展示图片或制作电子相册时,总想让图片有个新颖、独特的相框,而PPT自带的图片边框显得“力不从心”。如果利用自选图形,再经过边线及内部填充等设置,就能够制作出具有创意效果的相框。下面iSlide就讲述微立体相框和水晶相框的制作技法。
纸醉金迷i
2022/01/27
4.2K0
利用PPT如何设计制作创意相框
Vue2.X是如何利用Object.defineProperty()实现数据绑定的
Vue2.X是如何利用Object.defineProperty()实现数据绑定的
伯约同学
2022/02/15
4800
经典笔试题-在HTML中如何包含JavaScript?
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/11/20
2K0
如何制作自己的原生 JavaScript 路由
当你想到路由时,通常会想到类似 React 之类的库。但实际上,这些库和框架仍然使用 vanilla JavaScript。那么该怎么实现呢?
疯狂的技术宅
2020/03/27
4K0
利用c语言制作简易计算器
学了c语言之后,总想着能用c语言能制作一些简单的小工具来。而利用c语言来制作一款简易的计算器是一个不错的选择,用这款计算器可以计算的加、减、乘、除。
诸葛青云
2018/09/05
4.7K0
javascript 动态函数如何创建?
JavaScript作为一门动态语言,提供了多种创建动态函数的方法。动态函数的创建允许我们在运行时根据需要生成函数,从而实现灵活的编程和动态逻辑。本文将介绍动态函数的概念,探讨几种常用的方法来创建动态函数,并分享一些动态函数的应用场景。
海拥
2023/06/27
6760
javascript 动态函数如何创建?
如何采集javascript动态加载网页
从一个运行 javascript 的网站加载所有数据来加载内容,目前的问题是当运行启动代码时它无法加载 javascript 内容,因为用户应该向下滚动才能加载。如何编写启动代码来滚动整页呈现 javacript 并返回 html呢?
jackcode
2023/05/24
1K0
如何采集javascript动态加载网页
如何利用 JavaScript 实现并发控制
  例如一个爬虫程序,可以通过限制其并发任务数量来降低请求频率,从而避免由于请求过于频繁被封禁问题的发生。
Nealyang
2021/01/28
1.6K0
如何利用 JavaScript 实现并发控制
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)
前几天给大家分享了Xpath语法的简易使用教程,没来得及上车的小伙伴可以戳这篇文章:在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(上篇)、在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(下篇)。今天小编给大家介绍Scrapy中另外一种选择器,即大家经常听说的CSS选择器。
Python进阶者
2020/11/03
3K0
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(下篇)
前几天给大家分享了Xpath语法的简易使用教程,没来得及上车的小伙伴可以戳这篇文章:在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(上篇)、在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(下篇)、在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)。之前还给大家分享了在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇),没来得及上车的小伙伴可以戳进去看看,今天继续上篇的内容往下进行。
Python进阶者
2020/11/03
2.8K0
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(下篇)
在C中,如何知道动态分配是否成功
C语言使用 malloc函数动态在堆上分配内存。malloc根据字节数的参数。如果无法分配内存,该函数将返回指向已分配内存的指针或 NULL 指针。
mariolu
2021/11/06
2.8K0

相似问题

在列表中按索引查找min/max

22

按索引jQuery查找子项

30

Python:在多维列表中按范围查找索引

329

如何在jquery中按索引查找td

310

按索引在泛型列表中查找对象

33
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档