2012-06-03 3 views
0

В вопросе, который я отправляю, хочу знать, что для доступа к методу setused() я создаю объект с именем obj1 типа массива для класса alpha. но если я хочу получить доступ к одному и тому же методу из бета класса, и мне придется создавать другие объекты. Но есть ли способ, чтобы я мог использовать один и тот же объект, т. Е. obj1 типа массива для получения доступа к setused() методеиспользование объекта для доступа к переменным и методам класса

import javax.swing.JOptionPane; 
public class first() 
{ 
     public void main(String args[]) 
    { 
     alpha[] obj1=new alpha[5]; 
     for(int i-0;i<5;i++) 
     obj1[i].setused(int 1); 
    } 
} 

class alpha 
{ 
    private int un_used=5; 
    private int used=0 

    public int getun_used() 
    { 
      return un_used; 
    } 

    public int getused() 
    { 
      return used; 
    } 

    public void setused(int use) 
    { 
      used= use; 
    } 
} 

class beta 
{ 
    private String name; 
} 

ответ

3

Прежде всего кода будет бросать NullPointerException, потому что создание массива объектов заданного размера не означает, что вы создаете, что многие объекты. Массив содержит только null.

Во-вторых, ваши alpha и beta классы не делятся никакими методами, нет setused() метода в beta. Поскольку в настоящее время я предполагаю, что есть:

class beta 
{ 
    private String name; 

    public void setused(int use) { //... 
    } 

} 

Если вы хотите использовать ту же ссылку, чтобы получить доступ к этому методу обоих классов, чистый способ будет использовать :

interface Used { 

    void setused(int use); 

} 

abstract базовый класс также сделал. Затем реализовать этот интерфейс:

class alpha implements Used { //... 
class beta implements Used { //... 

Теперь создать массив Used типа:

Used[] obj1=new Used[5]; 
obj1[0] = new alpha(); 
obj1[1] = new beta(); 
//... 
for(int i-0;i<5;i++) 
obj1[i].setused(1); 

Наконец читать о Java naming conventions.

0
You have to pass the reference of obj1 to the class beta like: 
class beta 
{ 
    alpha a; 
    beta(alpha a) 
    { 
    this.a = a; 
    } 


} 
0
class beta{ 
private String name; 
private alpha[] alphaArray ; 

public void setAlpha(alpha[] alphaArray){ 
    this.aplhoaArray = alphaArray.clone(); 
} 

public void someMethod(){ 
    // access alpha[index].setUsed() method here 
} 

}

Не уверен, что я понимаю вашу проблему правильно, но, возможно, этот код поможет.

2

Вы хотите использовать статический модификатор для метода, к которому вы хотели получить доступ. Это означает, что в других классах вы можете получить доступ к методу, используя ClassName.methodname (параметры). Так, например, если вы хотите иметь setused быть статический метод, то вы сможете получить доступ его сначала alpha.setUsed:

public static void setUsed(int use) { 
    used=use; 
} 

public class first { 

    public void main(String args[]) { 
     alpha.setUsed(); 
    } 
} 

Если вы хотите узнать больше о статических и других предметов, а затем направиться в Java Учебники (http://docs.oracle.com/javase/tutorial/), они довольно хорошо объясняют все это.

Вы также инициализируете 5 объектов, а не 1. Чтобы альфа-класс класса соответствовал массиву, вам потребуется иметь альфа-расширение массива.

public alpha extends Array {} 

Это позволит классу использовать все методы массива через наследование. Обратите внимание, что другое слово для наследования - это полиморфизм и упомянуто выше.

Кроме того, объекты в массиве должны быть созданы после того, как вы их инициализировали.

public void main(String args[]) { 

    alpha[] obj1=new alpha[5]; 
    for(int i-0;i<5;i++) { 
     obj[i] = new alpha(); 
     obj1[i].setused(1); 
    } 
} 

объекты должны быть инициализированы (данное пространство памяти), а затем обрабатываются (заполнение пространства памяти с реальным объектом).

Обратите внимание, как объекты, как правило, называют:

alpha a = new alpha(); 

То есть инициализация и конкретизации на одной линии, здесь на две строки:

alpha a; 
a = new alpha(); 

первой линии выделения памяти для а, второй фактически создает и помещает его в эту память, готовую к использованию.

Вы только инициализировали массив объектов, поэтому при попытке использовать их было бы исключение NullPointerException.

Надеюсь, это помогло.

Смежные вопросы