假设您的用户类有两种方法,如methoda
和methodb
。我们创建了这个类的两个实例a
和b
。现在我想更新我的代码,methoda
应该是可见的,只有实例a
和methodb
应该对实例b
可见。我没有得到我们如何在Java中实现这一点。对于同一类别的不同实例的Java方法限制
回答
不,方法可见性始终基于类型,而不是单个实例。听起来也许你应该有两个小类,一个是methodA
,另一个是methodB
;您可以创建相应子类的实例。
如果a
和b
都是同一类的实例,则不能这样做。这两个实例都有相同的方法(即OOP中的行为)。
你可以做这样的:
public interface InterfaceA { void methodA(); }
public interface InterfaceB { void methodB(); }
public class User implements InterfaceA, InterfaceB {
public void methodA() { System.out.println("method A"); }
public void methodB() { System.out.println("method B"); }
}
//一些别的地方
InterfaceA a = new User();
InterfaceB b = new User();
现在,a
“看见” 只有methodA()
和b
“看见” 只有methodB()
我认为没有其他办法可以做到这一点。
这确实是要走的路。使用接口来限制引用的行为可能是安全设计最重要的设计模式。 – 2012-02-02 07:46:17
你需要使用多态性和hage回答你的问题。
了解在多态性读取过程中会发生什么。
- 编译器查看对象的声明类型和方法名称。比方说, 我们称之为
x.fun(param)
,并且隐含参数x被声明为C类的一个对象
注意,可能有多种方法,都具有相同的名称,好玩的,但具有不同的 参数类型。例如,可能有一个方法f(int)和一个方法f(String)。 编译器列举了类C中所有称为fun的方法以及所有在C的超类中称为fun的公共/受保护方法fun。现在,编译器知道调用方法的所有可能候选者。
接着,编译器确定的类型被在 方法调用提供的参数。如果在所有被称为乐趣的方法中有一种独特的方法,其参数类型是所提供的参数的最佳匹配,则该方法是 被选择调用。这个过程被称为超载分辨率。
如果方法是私有的,静态的,最终的或构造函数,那么编译器确切地知道调用哪个方法。编译器然后使用静态绑定。 否则,如果要调用的方法取决于隐式参数的实际类型,则编译器使用动态绑定。
当程序运行,并使用动态绑定来调用一个方法,则虚拟机 必须调用适合于实际类型的 目的是其中x是指该方法的版本。
假设实际类型是D,C的一个子类。如果类D定义了一个方法fun(String),那么调用该方法。 如果不是,则搜索D的超类,以搜索方法fun(String),等等。每次调用某个方法时执行此搜索将非常耗时。 因此,虚拟机会为每个类预先计算一个方法表,其中列出了所有方法签名和要调用的实际方法。当一个方法实际上调用 时,虚拟机只是简单地进行表查找。
- 1. Java Refring不同类的对象实例
- 2. 从同一类的不同实例访问私有方法
- 3. 方法:具有两个不同类的实例的Java数组
- 4. 同类别不同对象的同步方法
- 5. 如何调用一个类的实例,实例方法从不同的类
- 6. Scala:两个不同类的实例,相同的方法
- 7. Java:如何从不同类实例化的不同对象中调用具有相同名称的方法?
- 8. 实例方法JAVA中的同步
- 9. 如何用不同的方法创建一个类的实例?
- 10. 从java中的类中实例化同一类的对象
- 11. 在同一行上分配同一类别的多个实例
- 12. 对同一类别的几个实例的Foreach循环
- 13. 创建一个同时是实例和类方法的方法
- 14. 吉斯实例不同类别与不同的供应商
- 15. 创建类实例的不同方式
- 16. 在不同类别的相同实例C++
- 17. Java - 在用同一类的另一种方法实例化的方法中使用对象
- 18. 从同一类中的另一种方法在类实例中调用方法
- 19. 如何在类方法中调用不同的类实例?
- 20. 不同类别的调用方法
- 21. 最好的方法,从不同类别
- 22. TestNG dependsOn不同类别的方法
- 23. 对于特定类模板类型的模板类方法的不同实现
- 24. 来自不同实例的Java受保护的方法访问
- 25. 可以用java相同的方式实例化一个scala类
- 26. 访问来自不同类java的jdialog的一个实例
- 27. 如何测试类实例是否属于同一级别的父类之一?
- 28. 对不同的类实例使用相同的函数
- 29. 在PHP中实例化类实例的不同方式
- 30. ManyToMany的2个实例用于同一类中的同一实体
怎么样实例C和D等?我的意思是方法应该是可见的或不是? – 2012-02-02 07:41:37