java - 包中的类如何使用另一个版本的对象类型?
问题描述
我需要创建一个包含两个包的 Java 项目:com.myPackage
和com.myPackage.subpackage
.
这两个包包含以下类:
/* **************************************** */
package com.myPackage.subpackage;
public class ClassA {
public ClassB cB = new ClassB(); // Here I need to have NewClassB instead of ClassB
// ...
}
public class ClassB extends ClassC {
public void doSomething() {
// ...
}
}
/* **************************************** */
package com.myPackage;
public class NewClassB extends ClassC {
public void doSomethingElse() {
// ...
}
}
我的问题是:我想保留subpackage
“多用途”(与我现在正在构建的应用程序的特殊情况无关),以便将来重新使用它。但是在我的应用程序中,我还需要在 object 的定义中ClassA
使用NewClassB
而不是, :我该怎么做?我以为我可以创建一个接口,然后在.. 中实现它,但后来我无法在 .. 中实例化对象,因为它将是一个接口。此外,并且必须扩展另一个类 ( )。ClassB
cB
ClassB
NewClassB
cB
ClassA
ClassB
NewClassB
ClassC
有人可以提供建议吗?
提前致谢。
编辑:为清楚起见,我不想NewClassB
在subpackage
. 另外,我无法定义NewClassA
which uses NewClassB
,因为在我的实际应用程序NewClassA
中,它又被其他类使用,那么我最终会做New
所有这些的版本......
解决方案
您总是准确地实例化您想要的类(如果您考虑一下,这是有道理的,JVM 应该如何知道您现在想要哪个特定的子类?)
听起来你想NewClassB
扩展ClassB
.
public class NewClassB extends ClassB {...}
那么您可以将其用作
public class ClassA {
public ClassB cB = new NewClassB();
}
由于继承,将 的实例分配给NewClassB
类型ClassB
化变量,甚至ClassC
在这种情况下(因为ClassB
extends ClassC
)分配给类型化变量是绝对没问题的。
如果您不想ClassA
对 的具体实现有任何了解ClassB
,您可以简单地在构造函数中传递它:
public class ClassA {
public ClassB cB;
public ClassA(ClassB cB){
this.cB = cB;
}
}
这对您的问题有帮助吗?
推荐阅读
- python - Python - 将添加的基类功能传播到子类
- python - 使用 .grid 时无法在 Tkinter 中调用 Radiobutton
- c# - 在 C# 中速率限制客户端 api 的最佳方法
- amazon-sqs - 限制到单个 SQS 队列的连接数
- python - python unistallation 出错,apt-get 和 dpkg 在 Ubuntu 上损坏错误消息 1
- python - 在python中将分钟四舍五入到(00,15,30,45)中的最接近的数字
- python - 为什么第一部分代码不断重复?
- amazon-dynamodb - 没有范围键的 DynamodbDB 查询
- hibernate - Hibernate envers 抛出 ClassCastException:HashMap 无法转换为 Integer
- windows - 将子域指向它的文件夹 IIS