Thi*_*ker 10 java oop inheritance encapsulation abstraction
假设我有1个完整的类,其中包含约20种提供不同功能的方法。
现在,我们有多个使用此类的客户端,但我们希望它们具有受限的访问权限。
例如-
客户端1-可以访问method1 / m3 / m5 / m7 / m9 / m11
客户端2-可以访问method2 / m4 / m6 / m8 / m10 / m12
有什么办法可以限制此访问权限?
我认为的一种解决方案:
创建2个扩展父类的新类,并覆盖无法访问的方法,并从中抛出Exception。但是,如果第3个客户端有不同的要求,我们必须为其创建新的子类。
还有其他方法吗?
Max*_*rov 16
Create 2 new classes extending Parent class and override methods which are not accessible and throw Exception from them. But then if 3rd client with different requirement, we have to create new subclass for them.
It is a bad solution because it violates Polymorphism and the Liskov Substitution Principle. This way will make your code less clear.
首先,您应该考虑一下您的类,您确定它不会被方法重载吗?您确定所有这些方法都与一种抽象有关吗?也许有一种将方法划分为不同的抽象和类的感觉?
如果类中存在这些方法,那么您应该对不同的客户端使用不同的接口。例如,您可以为每个客户端创建两个接口
interface InterfaceForClient1 {
public void m1();
public void m3();
public void m5();
public void m7();
public void m9();
public void m11();
}
interface InterfaceForClient2 {
public void m2();
public void m4();
public void m6();
public void m8();
public void m10();
public void m12();
}
Run Code Online (Sandbox Code Playgroud)
并在课堂上实施它们
class MyClass implements InterfaceForClient1, InterfaceForClient2 {
}
Run Code Online (Sandbox Code Playgroud)
之后,客户端必须使用这些接口而不是类的具体实现来实现自己的逻辑。
小智 15
您可以创建一个Interface1仅为定义方法的Client1和,一个Interface2仅为定义方法的Client2。然后,您的类实现Interface1和Interface2。
声明后,Client1您可以执行以下操作:Interface1 client1。使用这种方法,client1只能访问此接口的方法。
我希望这能帮到您。