2017-02-14 17 views
1

Что происходит в этом коде? Я хочу отобразить вывод как «Печать данных ASD» без вызова конструктора. КлассМожно ли вызвать конструктор без создания его объекта

Ребенок:

package com.javatraining; 

public class test1 extends test2{ 

    public static void main(String[] args) { 
     disp(); 
    } 
} 

Родительский класс:

package com.javatraining; 

public class test2 
{ 
    public static String name; 

    public test2(){ 
     name="ASD"; 
    } 

    public static void disp(){ 
     //test2 t=new test2(); 
     System.out.println("Printing data "+name); 
    } 
} 
+0

Несомненно. 'test2.name =" ASD "; test2.disp(); 'Это статический метод, печатающий статическую переменную. –

+0

Короткий ответ: нет, вы не можете вызвать конструктор, как обычный метод. –

+1

имя не инициализировано, поэтому я предполагаю, что оно напечатает «Печать данных null» –

ответ

1

Присвоить значение имени объекта тест 2 класса. Это будет работать.

public static void main(String[] args) { 
     test2.name = "ASD"; 
     disp(); 
    } 
+0

Если это вам поможет. Примите ответ –

0

НЕТ. Вы не можете вызывать конструктор без создания объекта.
Если вы не создали объект test2 по test2 = new test2();, вы получите null.

Единственный способ, которым вы бы вызвали конструктор, если он был статичным, но constructors in Java can't be static. Итак, вы создали объект для вызова конструктора.

0
public class MainJava extends Test{ 

    public static void main(String[] args){ 
     //Option 1 
     disp(); 

     //Option 2 
     name = "ABCD"; 
     disp(); 

     //Option 3 
     new Test(); 
     disp(); 
    } 

    } 

    class Test { 
    public static String name = "TEMP"; 

    public Test() { 
     // Will not get called. Unless you create Object 
     name = "ASD"; 
    } 

    public static void disp() { 
     System.out.println("Printing Data " + name); 
    } 
} 
0

Вы не должны вызывать конструктор родительского класса вообще, , если все, что вы хотите в вашем классе ребенка является инициализируются значением name члена класса, то вы можете сделать заявление + инициализацию в одном как показано ниже.

public static String name = "ASD"; 

Вышеупомянутый стиль позволяет сразу понять, как инициализируется переменная, а также выводит ожидаемый результат.

Конечно, если значение инициализации в разных конструкторах различно, вы должны сделать это в конструкторе. Вы можете узнать больше об инициализации объекта в this article.