2012-04-25 4 views
0

Если я хочу вызвать несколько методов одного класса из другого класса, могу ли я их вызвать, используя только «новое имя класса()», не перехватывая его в ссылке на класс?методы вызова без ссылки

public class Example { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     new pqr().a=5; 
     new pqr().b=10; 
     new pqr().display(); 
    } 
} 
class pqr 
{ 
     int a,b; 

     public void display() 
     { 
       System.out.println(a+" "+b); 
     } 

} 

ответ

5

Это создает три новых объекта. Не один.

new pqr().a=5; 
new pqr().b=10; 
new pqr().display(); 

Один объект с = 5, а другой с Ь = 10.

Помните, что вы не работаете с одним объектом.

Всякий раз, когда вы используете новое ключевое слово. JVM создает новый объект.

+2

и дисплей не будет ссылаться ни на один из них –

+0

Да. Он создает 3 новых объекта. Я отредактировал сообщение –

3

Если я хочу вызвать несколько методов одного класса из другого класса, могу ли я их вызвать, используя только «новое имя класса()», не перехватывая его в ссылке на класс?

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

В вашем примере вы создаете три разных объекта - расчет на вашей последней строке просто печатает 0, потому что вы только установили a и b в других объектах. Если вы хотите использовать один объект для нескольких операций, вы должны либо необходимо сохранить ссылку в переменной, либо эти операции должны будут возвратить «это», что позволит вам сгруппировать вызовы методов:

class Sample { 
    private int a,b; 

    public void display() { 

     System.out.println(a+" "+b); 
    }  

    public Sample setA(int a) { 
     this.a = a; 
     return this; 
    } 

    public Sample setB(int b) { 
     this.b = b; 
     return this; 
    } 
} 

... 

new Sample().setA(5).setB(10).display(); 

Этот тип цепочки для сеттеров распространен в шаблоне строителя.

+0

@trutheality: Doh! Спасибо, исправлено. –

0

Вы можете использовать Builder шаблон, если вы хотите что-то вроде этого:

NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8). 
    calories(100).sodium(35).carbohydrate(27).build(); 
+0

Но это создает новую ссылку ... –

0

Узор строитель одна возможность. Другой - иметь статические свойства, чтобы все объекты делились своими значениями.

static int a,b;