我是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中的“安全选项”,那么在这种情况下我们需要处理的其他考虑因素是什么。
答案 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可以继续使用,或者在必要时进行修改。