2012-02-22 49 views
1

我是Java的新手,所以下面的问题可能看起来微不足道。在Java中向抽象基类添加成员的影响

背景:

方案1:
我有一个抽象基类C1在Java中与说N接口成员函数。
客户端使用此类作为包并实现客户端业务逻辑Client1
所以Client1使用包Package1(其中包含C1类定义)能够与jar JAR1一起使用。

场景2:
我想了解将新成员函数添加到类C1的影响。带有额外成员的类C1(称为C2)包含N+M成员函数(假定客户端不使用)具有jar文件JAR2

现在有可以存在部署的多重组合 -
Client1(建Package1)在JAR1
Client1环境中运行(建Package1)在JAR2
环境中运行等

我从很基本一个C++的背景和那里,vptr的概念及其影响将在一个新的接口被添加到暴露给客户的类中时详细研究。

问题:
a。在JAVA的情况下,这些扩展是如何分析和实现的(任何相同的材料都非常有用)。 b。如果这是java中的“安全选项”,那么在这种类型的情况下我们需要处理哪些其他考虑因素。

回答

1

如果我理解正确,你的问题是关于修改接口的含义。

实现一个接口允许一个类对它承诺提供的行为变得更加正式。接口形成了类和外部世界之间的契约,并且这个契约在编译器的编译时执行。

interface Turns 
{ 
    public void turnLeft(); 
    public void turnRight(); 
} 

class Device implements Turns 
{ 
    public void turnLeft() 
    { 
    //implementation 
    } 
    public void turnRight() 
    { 
    //implementation 
    } 
} 

现在,如果我们需要修改接口。我们所做的是扩展界面。

interface TurnsAllWays extends Turns 
{ 
    public void turnsBack(); 
} 

因此,现在设备可以继续保持原样,或者在必要时进行修改。

+0

感谢您的意见。但是,如果我在现有的接口本身中添加新的'合约'(我知道这将表示初始设计不佳),但如果这样,影响会是什么? – 2012-02-22 14:34:36

+0

只有在重新编译文件之前,它才会中断。如果编译它会引发编译时错误。 '设备不是抽象的,并且不会覆盖Turns'中的抽象方法turnsBack() – John 2012-02-22 14:41:59