我有一个Class,它包含一个只能存在于类中的Object。 (也就是说,该对象永远不会在类之外使用。)因此,我希望该对象可以访问该类的受保护方法。
由于Class实例化了Object,我不希望Object扩展Class,因为这将实例化一个Class对象,它将实例化Object,依此类推,直到时间结束。
那么,有没有办法允许Object访问Class的受保护方法?
很抱歉,如果这是一个容易回答的问题,但很难谷歌这种特殊情况。
答案 0 :(得分:2)
如果该类仅在另一个类中使用,则将其设为内部类。见这个例子:
public class DataStructure {
// Create an array
private final static int SIZE = 15;
private int[] arrayOfInts = new int[SIZE];
public DataStructure() {
// fill the array with ascending integer values
for (int i = 0; i < SIZE; i++) {
arrayOfInts[i] = i;
}
}
public void printEven() {
// Print out values of even indices of the array
DataStructureIterator iterator = this.new EvenIterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println();
}
interface DataStructureIterator extends java.util.Iterator<Integer> { }
// Inner class implements the DataStructureIterator interface,
// which extends the Iterator<Integer> interface
private class EvenIterator implements DataStructureIterator {
// Start stepping through the array from the beginning
private int nextIndex = 0;
public boolean hasNext() {
// Check if the current element is the last in the array
return (nextIndex <= SIZE - 1);
}
public Integer next() {
// Record a value of an even index of the array
Integer retValue = Integer.valueOf(arrayOfInts[nextIndex]);
// Get the next even element
nextIndex += 2;
return retValue;
}
}
public static void main(String s[]) {
// Fill the array with integer values and print out only
// values of even indices
DataStructure ds = new DataStructure();
ds.printEven();
}
}
答案 1 :(得分:0)
你需要让它成为一个内部课程
这是有关该主题的有用资源 - http://www.javaworld.com/article/2077411/core-java/inner-classes.html
答案 2 :(得分:0)
因此,我希望该对象可以访问该类 保护方法。
了解创建内部类。内部类的对象可以访问封闭类的方法。看看official Java tutorials on nested classes.
SSCCE:
public class Outer{
private int value = 99;
public Outer(){ // Creating an object of Outer class
new Inner(); // creates an object of Inner class
}
private int getEnclosedValue(){ // Accessor for getting the int value
return value;
}
public class Inner{
public Inner(){ // Constructor for Inner class calls getEnclosedValue()
System.out.println(getEnclosedValue()); // of the Outer class
}
}
public static void main(String[] args){
new Outer();
}
}