HAS-与Java中的继承关系

时间:2014-02-21 14:57:42

标签: java inheritance

我有一个Class,它包含一个只能存在于类中的Object。 (也就是说,该对象永远不会在类之外使用。)因此,我希望该对象可以访问该类的受保护方法。

由于Class实例化了Object,我不希望Object扩展Class,因为这将实例化一个Class对象,它将实例化Object,依此类推,直到时间结束。

那么,有没有办法允许Object访问Class的受保护方法?

很抱歉,如果这是一个容易回答的问题,但很难谷歌这种特殊情况。

3 个答案:

答案 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();
    }
}