2015-04-14 2 views
2

Вот код:Как я могу получить доступ к методам разных классов в Java, используя массив типа Object

public static void main(String args[]) 
{ 
    Circle objCircle = new Circle(5); 
    Square objSquare = new Square(5); 
    Triangle objTriangle = new Triangle(3, 4); 
    Sphere objSphere = new Sphere(5); 
    Cube objCube = new Cube(5); 
    Tetrahedron objTetra = new Tetrahedron(5); 
    Object[] Shape = new Object[5]; 
    Shape[0] = objCircle; 
    Shape[1] = objSquare; 
    Shape[2] = objTriangle; 
    Shape[3] = objSphere; 
    Shape[4] = objCube; 
    Shape[5] = objTetra; 
    for(int i = 0; i<Shape.length; i++) 
    { 
     //Problem occured in this section of code 
     System.out.println(Shape[i].getArea()); 
    } 
} 

}

У меня есть шесть различных классов, и все они имеют метод GetArray() с их собственным определением. Я хочу напечатать значения, которые метод getArray() возвращает из разных классов, используя массив Shape.

+0

Вам нужно бросить, или используйте интерфейс. – SLaks

+0

Я использовал абстрактный класс. У меня 6 классов. кастинг, если я бросаю для каждого класса отдельно. – cnayak

+3

@Chandan: У вашего абстрактного класса есть метод getArea()? Если это так, просто измените массив как массив этого типа, а не 'Object []'. –

ответ

1

Определите интерфейс, как показано ниже. Внедрите этот интерфейс в классе Circle, Square ..

public interface Shape { 

    public Double getArea(); 
} 

Тогда вы можете использовать различные классы getArea, как показано ниже.

Shape [] shape = new Shape [5]; 
    shape[0] = objCircle; 
    shape[1] = objSquare; 
    shape[2] = objTriangle; 
    shape[3] = objSphere; 
    shape[4] = objCube; 
    shape[5] = objTetra; 
    for(int i = 0; i<Shape.length; i++) 
    { 
     //Problem occured in this section of code 
     System.out.println(Shape[i].getArea()); 
    } 
+2

Зачем использовать Double вместо примитивного двойного ?? – loikkk

+0

его выбор Я использовал его только для примера :) –

0

Используйте интерфейс или абстрактный класс и расширьте от него все различные формы.

public abstract class Shape{ 
    public abstract SomeType getArray(); 
} 

И использовать

Shape[] Shapes 

вместо Object[].

0

Прежде всего, вы должны избегать использования объекта [] Что случилось, если вы сделаете это?

... 
shape[6] = Integer.parseInt(1); 
for(int i = 0; i<shape.length; i++) 
{ 
    //Oups a problem will occured here 
    System.out.println(shape[i].getArea()); 
} 

С помощью Object [] вы не используете безопасность типа Java. Каждый экземпляр наследуется от Object в Java, что означает, что вы можете поместить все в свой массив.

Я вижу, что вы помещаете переменную с заглавной буквы. Это разрывает использование Java-соглашения для класса, Enum, Interface. Может быть, я слишком ортодоксальный :)

Вы можете сделать следующее:

public abstract Shape { 
public abstract double getArea(); 
} 

public Circle extends Shape { 
    public abstract double getArea(){ 
    //implementation here 
    } 
} 

etc... 

В зависимости от вашего использования. Интерфейс может быть намного более уместным из-за компромиссов наследования в некоторых случаях.

И используйте Список Форм. При вызове метода List.add вы будете иметь тот же тип. Кроме того, вы можете использовать цикл Еогеасп

+0

Я использовал для каждого цикла изначально, но я получил эту ошибку: может только перебирать массив или экземпляр java.lang.Iterable. – cnayak

0

Спасибо всем я получил это правильно, и я отправляю мой ответ, что я решил с помощью

public static void main(String args[]) 
{ 

    Circle objCircle = new Circle(5); 
    Square objSquare = new Square(5); 
    Triangle objTriangle = new Triangle(3, 4); 
    Sphere objSphere = new Sphere(5); 
    Cube objCube = new Cube(5); 
    Tetrahedron objTetra = new Tetrahedron(5); 
    Shape[] a = new Shape[6]; 

    a[0] = objCircle; 
    a[1] = objSquare; 
    a[2] = objTriangle; 
    a[3] = objSphere; 
    a[4] = objCube; 
    a[5] = objTetra; 
    for(int i = 0; i<a.length; i++) 
    { 
     a[i].getArea(); 
    } 


} 

}