2015-06-19 3 views
0

Итак, я смотрел видео с youtube, и youtuber сказал: «Когда вы создаете этот« объект », вам нужно будет установить его на новый« тип »этого объекта» ...ООП - Требуются ли конструкторы?

класс был назван objectIntro и конструктор был:

   public objectIntro(){ 
//Object Constructor (Method) 
} 

Так вот мой вопрос ...

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

public class car { 

double petrolLevel; 
double tankSize; 

public void refillPetrol(double I){ 

    if(I>tankSize){ 
     I = tankSize; 
     petrolLevel = petrolLevel + I; 
    } 
    else{ 
     petrolLevel = petrolLevel + I; 
    } 
} 

public void fuelConsumption(double O){ 

    if(O>tankSize){ 
     O=tankSize; 
     petrolLevel = petrolLevel - O; 
    } 
    else{ 
     petrolLevel = petrolLevel - O; 
    } 
} 

public String returnPetrolLevel(){ 
    return String.format("%sL", petrolLevel); 
} 

} 

Тогда класс, в котором создается объект ...

public class carObject { 
public static void main(String[] args){ 

car object1 = new car(); 


object1.tankSize = 50;//Litres 
object1.petrolLevel = 0;  

object1.refillPetrol(50); 
object1.fuelConsumption(20); 
object1.returnPetrolLevel(); 

System.out.printf("Petrol Level: %s", object1.returnPetrolLevel()); 
} 
} 

Мой вопрос, как же мой объект работает без конструктора? В классе автомобилей у меня нет метода, который говорит «public car() { }», тогда как youtuber заявил, что это потребуется?

Может ли кто-то прояснить это, также я думаю, что я не использую термин конструктор и метод в контексте записи, может кто-то объяснить определение этих терминов вместе с некоторыми примерами.

Благодаря

+0

Если вы не пишете явный конструктор, конструктор просто, без аргументов генерируются системой. – markspace

+0

++ markpace сказал: Ваш класс «автомобиль», пожалуйста, назовите его. Автомобиль (хорошая практика для заглавной буквы первой буквы объектов/классов) будет содержать конструктор независимо от того, создаете ли вы его. "public Car() {}; – FirebladeDan

ответ

4

Это все в Java tutorial

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

Также соглашение заключается в прописных именах классов, строчных параметрах вашего метода и использовании геттеров/сеттеров для переменных-членов, которые обычно являются частными.

Иногда вы можете заметить, что вы не можете сделать new MyClass() или хорошо, что вы не можете создать экземпляр объекта с new. Иногда это происходит потому, что кодер предоставил частный конструктор no-arg. Это делается, когда вы хотите, чтобы пользователь создавал экземпляр объекта с использованием фабричного метода (который вы предоставляете в этом классе) и т. Д. Но все же не меняет того факта, что у конструктора есть (это часть языковой спецификации).

Если вы хотите узнать больше о конструкторе по умолчанию вы можете обратиться к java language spec.

0

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

https://msdn.microsoft.com/en-us/library/aa645608(v=vs.71).aspx

+0

Обратите внимание, что ссылка указывает на ** C# ** документацию, в то время как вопрос указан в ** теге ** ** ** **. – MaxZoom

+0

@ElliottFrisch основная подпись метода на C# отличается, нет' System .out.printf' в C#, соглашения об именах не являются даже C# ... Плюс, как упоминается MaxZoom, вопрос помечен Java. –

1

Если у вас нет конструктора есть неявный конструктор, который устанавливает все член их значение по умолчанию, например, 0 для int

Разница между конструктором и методом заключается в том, что конструктор создает и инициализирует объект, в то время как метод предназначен для уже существующего объекта. Вы можете думать о конструкторе как о функции, которая вызывается на вновь созданном объекте, чтобы каким-то образом инициализировать данные.

1

JLS занимает особую заботу класса без конструктора:

Если класс не содержит конструктор деклараций, то по умолчанию конструктора без формальных параметров и не кидает оговорка неявно объявляется.

Это означает, что если вы не создадите конструктор для своего класса, вам будет предоставлен компилятор, и все члены класса будут инициализированы значениями по умолчанию виртуальной машиной Java.

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

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

1

Ответ на ваш вопрос заключается в том, что если вы не предоставите конструктор классу, JVM неявно вызовет конструктор по умолчанию, который не имеет параметра.

Для получения более подробной информации о конструкторе вы можете обратиться ниже ссылка https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

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