在Java中向Abstract Base Class添加成员的影响

时间:2012-02-22 14:08:32

标签: java deployment abstract-class

我是Java的新手,所以下面的问题可能看起来微不足道。

背景

情景1:
我在Java中有一个抽象基类C1,说N接口成员函数 客户端将此类用作包,并实现客户端业务逻辑Client1 因此,使用包Client1(包含Package1类定义)的C1能够使用jar JAR1

情景2:
我想了解向类C1添加新成员函数的影响。具有其他成员的类C1(比如我们称之为C2)包含N+M成员函数(假设客户端不使用)具有jar文件JAR2

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

我基本上来自C ++背景,当将新接口添加到暴露给客户端的类时,将详细研究vptr的概念及其影响。

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

2 个答案:

答案 0 :(得分:2)

回答这两个问题:

a)本文描述了JVM如何加载和链接类文件:http://java.sun.com/docs/books/jvms/second_edition/html/ConstantPool.doc.html

b)只要方法/公共成员的签名没有改变,调用代码仍然有效。更改这些将在加载类时导致运行时异常。

答案 1 :(得分: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();
}

所以现在Device可以继续使用,或者在必要时进行修改。