我可以限制其他类在Java中可以调用的方法吗?
假设我有类我可以限制其他类在Java中可以调用的方法吗?,java,interface,Java,Interface,假设我有类A、B和C,其中类C具有可读写属性: public class C { private int i = 0; // Writable. public void increment() { i++; } // Readable. public int getScore() { return i; } } 是否可以只让A使用increment()方法,而只让B使用getScore()方法?不可以这样做 Java有4个作用域:私有、受保护、公共和
A
、B
和C
,其中类C
具有可读写属性:
public class C {
private int i = 0;
// Writable.
public void increment() { i++; }
// Readable.
public int getScore() { return i; }
}
是否可以只让
A
使用increment()
方法,而只让B
使用getScore()
方法?不可以这样做 Java有4个作用域:私有、受保护、公共和“包”。可以从任何地方访问公共内容。仅受子类保护。private只是那个类。“package”范围未命名,但如果省略其他三个范围中的任何一个,则假定为package范围。这只能由同一包中的其他类访问
HTH.否,无法分配每类访问权限。
考虑将类分离为单独的接口,以便每个类只获得一个具有所需接口的对象。例如:
interface Incrementable { public void increment(); }
interface HasScore { public int getScore(); }
class C implements Incrementable, HasScore { /* ... */ }
class A {
public A(Incrementable incr) { /* ... */ }
}
class B {
public B(HasScore hs) { /* ... */ }
}
当然,存在安全隐患,但这应该让您朝着正确的方向思考。是的,但您必须经历一些曲折
public interface Incrementable {
public void increment();
}
public interface Readable {
public int getScore();
}
public class C implements Incrementable, Readable
{
...
}
现在,当您在A中定义接收对
B
实例的引用的方法时,请将该方法定义为采用可增量的方法。对于B
,将其定义为采用可读的尽管直接的答案是否定的,但另一个解决方法(难看的方法)可能是创建两个扩展第三个接口的接口(或者您可以将一个对象作为参数):
读写器,将调用类作为参数传递给每个函数:
public interface Caller;
public interface Reader extends Caller;
public interface Writer extends Caller;
public void increment(Caller c) {
if (c instanceof Writer) {
i++;
}
}
这不是您想要的,但是您可以进入堆栈跟踪(创建异常)并检查调用增量方法的类。protected
并不意味着只能从子类访问字段/方法/类。来自同一个包的类也可以使用受保护的。如果需要访问的类在同一个包中,它将有权访问该方法,但其他人不会。谢谢-现在等待计时器。如果他创建抽象类,然后实现这些,难道没有办法吗methods@Smit这本质上是一样的-抽象类允许您实现一些常见的细节,不过,@sdadas只是想确定一下。因此,可以使用抽象类来解决这个问题。我之所以问这个问题,是因为您引用了,而这与回答问题或回答问题本质上是一样的。@Smit您只能扩展一个抽象类,在这个抽象类中可以实现(afaik)任意数量的接口。我相信你会想在这个问题的上下文中使用接口。也许,一些技巧会有所帮助?AspectJ的“delcare错误”构造如何?