假设我通过扩展String创建了StringUtil类。现在,任何调用StringUtil的第三方都可以使用为String类定义的所有方法。如何限制某些方法的使用?
答案 0 :(得分:1)
String 类是final,您无法在Java中扩展最终类。您必须阅读有关Java核心的更多信息。例如,首先阅读https://www.w3schools.in/java-tutorial/super-final-keywords/
此外,当您需要字符串实用程序时,您有几个选项,例如 Apache-Commons-Lang 或 Spring-Core ,这些选项使您的代码可读并具有更多功能。
答案 1 :(得分:0)
如果您有多个类,以便您希望每个类都可以访问StringUtil
中的一组方法,则可以执行以下操作:
例如,如果Class1
只需要方法:f1
,f2
,f3
那么您可以创建一个接口interface1
,以便仅公开{ {1}},f1
,f2
和f3
会收到Class
类型的对象作为其构造函数的参数。 interface1
实施StringUtil
。
对其他类执行相同操作,以便每个类只能使用您向它们公开的内容。
您还应该阅读dependency injection。
接口:
interface1
StringUtils类:
interface Interface1 {
void f1();
}
interface Interface2 {
void f2();
void f3();
}
使用StringUtils类的类:
class StringUtils implements Interface1, Interface2 {
@Override
public void f1() {
}
@Override
public void f2() {
}
@Override
public void f3() {
}
}
答案 2 :(得分:0)
然而,在这种情况下,可能会有一些解决方法:覆盖基础中的方法抛出一些期望,但它不是一个真正的解决方案。我的建议是使用composition
而不是inheritance
。这意味着您的base
应has a relationship
superclasses
。例如,假设有2个类A(与String类相同)和B(与StringUtil类相同)。
class A {
public int add(int a, int b) {
return a + b;
}
public int square(int a) {
return a * a;
}
}
class B {
A obj;
B(A obj) {
this.obj = obj;
}
public int add(int a, int b) {
return obj.add(a, b);
}
}
现在,您的B类只显示一个方法add
delegates
其行为为A类的add方法。此外,B上也没有square
。