Tag: oop

如何在多个枚举中重用代码

我们知道java enum类: 隐式扩展java.lang.Enum; 不能从任何其他枚举类扩展。 我有多个枚举类,如下所示: enum ResourceState { RUNNING, STOPPING,STARTTING;//… void aMethod() { // … } } enum ServiceState { RUNNING, STOPPING,STARTTING,ERROR;//… void aMethod() { // … } } 枚举ResourceState和ServiceState的方法aMethod()完全相同。 在OOP中,如果ResourceState和ServiceState不是枚举,则它们应该将相同的方法抽象为超级抽象类,如下所示: abstract class AbstractState{ void aMethod() { // … } } 但是ResourceState无法从AbstractState扩展,你有什么想法可以解决吗?

Scala的内部类和Java的内部/嵌套类之间有什么区别?

Scala如何以不同于Java的嵌套,静态或非静态类的方式处理内部类?

一长串if / else / execute代码分支的最佳设计模式/方法

我有一个“遗留”代码,我想重构。 代码基本上是对服务器进行远程调用并获得回复。 然后根据回复执行相应的。 代码骨架示例: public Object processResponse(String responseType, Object response) { if(responseType.equals(CLIENT_REGISTERED)) { //code //code … } else if (responseType.equals(CLIENT_ABORTED)) { //code //code…. } else if (responseType.equals(DATA_SPLIT)) { //code //code… } etc 问题是有很多if / else分支,并且每个内部的代码都不是微不足道的。 因此很难维护。 我想知道这个最好的模式是什么? 我有一个想法是创建一个方法名称与responseType相同的单个对象,然后在processResponse内部使用reflection调用与responseType同名的方法。 这将清理processResponse,但它会将代码移动到具有许多/多种方法的单个对象,我认为reflection会导致性能问题。 是否有一个很好的设计方法/模式来清理它?

Java中inheritance的坏例子是什么?

我知道Java中inheritance的优点,但我有点难以接受它也有缺点。 任何人都可以在Java中给我一个糟糕的inheritance示例吗?

标记方法并通过标记从客户端对象调用它们

我一直试图找出一种方法来从我的基类中标记几个方法,以便客户端类可以通过标记来调用它们。 示例代码是: public class Base { public void method1(){ ..change state of base class } public void method2(){ ..change state of base class } public void method3(){ ..change state of base class } } main()方法的客户端类将通过随机指令序列调用Base的每个方法: public static void main(String[] args) { String sequence = “ABCAABBBABACCACC” Base aBase = new Base(); for (int i = 0; […]

动态绑定== Java中的后期绑定与否?

在不同的来源中,我已经阅读了有关该主题的不同内容。 比如维基百科说: 后期绑定经常与动态调度混淆,但存在显着差异。 但后来几行 在Java编程中使用术语后期绑定作为动态调度的同义词很受欢迎。 具体来说,这是指Java与虚拟方法一起使用的单一调度机制。 那么真相是什么?这个“重大差异”是什么?

OOP术语:“容器”和“collections”

C ++术语“容器”只是Java术语“Collection”的同义词吗?

这是重载,方法在不同的类和不同的签名中具有相同的名称吗?

如果我在Java中有以下代码: class A { public int add(int a , int b) { return (a+b); } } class B extends A { public float add(float a , float b) { return (a+b); } 在这种特殊情况下,子类并不完全覆盖基类的add函数,因为它们具有不同的签名,并且只有当它们在同一范围内时才会出现重载的概念。 那么,函数add(float , float)在子类B被视为一个全新的函数,并且重载和重写的概念不适用于它吗? 它是否使用“静态绑定”或“动态绑定”?

Java内部类访问和最佳实践

现在已经很晚了,所以我很难记住它是如何工作的。 我知道一个Inner类可以访问外类中的所有内容(因为它是该类的成员)但是反过来呢? 1)外类是否可以访问内部类中的私有变量和方法? 2)我看过文章提到内部类应该是私有的,这样它们只能被外部类访问。 这对内部类的可访问性有什么影响? 3)在内部类中处理访问级别的最佳实践是什么? 我假设封装越多越好,但这是以牺牲可访问性为代价的吗? 谢谢!

在调用超类的构造函数之前,有没有办法在Java中初始化子类的成员变量?

我需要这个,因为超类中的构造函数正在调用在子类中重写的方法。 该方法返回一个传递给子类构造函数的值。 但必须在子类构造函数之前调用超类构造函数,因此我没有机会保存传入的值。