我希望能够在一个包中编写一个Java类,它可以访问另一个包中的类的非公共方法,而不必使它成为另一个类的子类.这可能吗?
我想知道为什么Java的设计没有friendC++中提供的指令,以便更好地控制哪些方法和实例变量可以从已定义类的包外部获得.
我没有看到任何实际的原因或任何特定的缺点,它似乎只是一个设计问题,但如果添加到语言中则不会产生任何问题.
是否真的不可能在jar文件中隐藏某些类?
我希望不允许直接实例化类以使其更灵活.这个罐子里只能看到工厂(或立面).
除了创建两个项目之外,还有其他办法解决这个问题吗?(两个项目:第一个包含类(实现),另一个引用第一个并包含工厂;后面只引用第二个)
我正在努力打包API以供公众使用.因此,我试图限制只暴露于我希望公开和可支持的方法.当然,在这下面有许多有限的访问方法.
麻烦的是我有很多内部代码需要访问这些受限制的方法而不公开这些方法.这会产生两个问题:
所以,我有大约70或80个内部类在干净隔离的包中但是具有过度宽松的访问修饰符.你会说单个包是两个邪恶中的较小者还是有更好的方法来掩盖我的内部方法,同时保持更细粒度的包?
我有兴趣在这里找到最好的做法.
我已经意识到了这一点
有谁知道在JAR文件中隐藏公共类的方法.换句话说,有没有办法创建"jar-visible"类.关键是要在我的JAR文件中隐藏公共类,并向我的JAR用户提供对指定类的访问.在MANIFEST框架中借助MANIFEST.MF中的"Export-Package"参数实现类似的东西
抽象是隐藏实现细节并仅向用户显示功能的过程。
另一种方式,它只向用户显示重要的东西并隐藏内部细节。所以下面是一个创建抽象类并覆盖抽象方法的示例。但我不明白的是它是如何隐藏实现细节的?
abstract class Bank
{
abstract int getRateOfInterest();
}
class SBI extends Bank
{
int getRateOfInterest()
{
return 7;
}
}
class PNB extends Bank
{
int getRateOfInterest()
{
return 8;
}
}
class TestBank{
public static void main(String args[])
{
Bank b;
b=new SBI();
System.out.println("Rate of Interest is: "+b.getRateOfInterest()+" %");
b=new PNB();
System.out.println("Rate of Interest is: "+b.getRateOfInterest()+" %");
}
}
Run Code Online (Sandbox Code Playgroud) 好吧,让我们离开关于友谊是否打破封装的争论,并且实际上尝试优雅地提出一个连贯的设计.这是一个双重功能:
1)关于如何实施的一般问题:
public class A
{
friend class B;
}
Run Code Online (Sandbox Code Playgroud)
2)为什么我需要这个功能?我的一些类实现了Serializable接口.但是,我想在Derived类中使Serializable方法受到保护,这样我就不会将它们暴露给客户端(以及文档中的javadoc).但是,内部类应该能够访问它们.在java中解决这个问题的一般方法是什么?
注意:我正在使用当前C++标准中定义的友谊.
谢谢