将父类成员限制为其直接子类
2022-09-04 02:36:11
假设我在Java中有四个具有给定层次结构的类。
class A {}
class B extends A {}
class C extends B {}
class D extends C {}
根据我的理解,类 A 的所有可访问字段都将通过继承提供给其所有子类。现在,如果我希望类 A 的几个字段仅对类 B 可用,该怎么办?
在java中有什么方法可以让我将父类的某些字段限制为其直接子类吗?
假设我在Java中有四个具有给定层次结构的类。
class A {}
class B extends A {}
class C extends B {}
class D extends C {}
根据我的理解,类 A 的所有可访问字段都将通过继承提供给其所有子类。现在,如果我希望类 A 的几个字段仅对类 B 可用,该怎么办?
在java中有什么方法可以让我将父类的某些字段限制为其直接子类吗?
并不是说我会在生产中做这样的事情,但是在这里你去:
class A {
private int a = 1;
public int getA() {
if (getClass().equals(A.class) ||
getClass().getSuperclass().equals(A.class)) {
return a;
} else {
throw new UnsupportedOperationException("hahaha");
}
}
public static void main(String[] args) {
A a = new A();
B b = new B();
C c = new C();
System.out.println(a.getA());
System.out.println(b.getA());
System.out.println(c.getA());
}
}
class B extends A {}
class C extends B {}
因此,基本上您可以使用此技巧仅允许所需的类(使用黑名单或白名单方法) - 调用.getA()
输出:
1
1
Exception in thread "main" java.lang.IllegalStateException: hahaha
...
将父类成员限制为其直接子类,为此,
Java 提供了访问修饰符,其中,您可以访问类成员:protected
1) 课堂内
2) 包装内和
3) 软件包外仅由子类提供。
如果要将数据成员限制为直接子类,则可以执行以下操作:
声明一个类,如下所示:
package com.firstpackage;
Class A{
protected int a;
}
现在在另一个包中使用子类,如下所示:
package com.secondpackage;
Class B extends A{
//Access data members of class A
}
现在,如果您从 中声明,in 和它们,那么这两个类 () 不是的直接子级,当然也不在实现的同一包中。因此,类 A 的数据成员在 中不可访问。Class C and D
package com.secondpackage;
extends
Class B
Class C and D
Class A
Class A
Class C and D