2015-01-31 8 views
0

Так что я немного запутался о концепцииПонимание классов в Java

методов экземпляра класса вызывается без первого экземпляра объект

Как это работает в Java? Должен ли я создать экземпляр объекта, чтобы я мог вызвать метод для объекта.

Например, вот мои классы ниже.

public class Date{ 
     public String month; 
     public int day; 
     public int year; 
    public void writeOutput() 
    { 
     System.out.println("Today is : " + this.month + " " + this.day + " , " + this.year); 
    } 
} 

public class DateTest{ 
    public static void main(String[] yolo){ 
     Date today; 
     today = new Date(); 
     today.month = "January"; 
     today.day = 31; 
     today.year = 2015; 
     today.writeOutput(); 
    } 
} 

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

+0

'String a = new Card();' не имеет смысла. Это строка или карта? Просьба к ясности с вашими вопросами. –

+0

И в отношении этой «концепции»: «Итак, я немного запутался в понятии« методы экземпляра класса, вызываемого без первого экземпляра объекта ».« '- игнорировать его, поскольку это не допустимая концепция Вы можете только вызвать методы экземпляра в экземпляре. Период –

+0

Я думаю, что лучше всего создать экземпляр объекта перед вызовом метода экземпляра? – Quinty

ответ

3

Это копия моего комментария:

Можете ли вы сделать собачий лай, если она не существует? (и существует только концепция собак). Теперь представьте себе концепцию собаки как класса, как кора и как Рекс как пример собаки. Итак, да, вам нужно instanciate a class (Dog Rex = new Dog();) Для использования метода (Rex.bark()). Разумеется, вы можете использовать статические методы, которые позволят вам сделать что-то вроде Dog.bark(), но это не ООП.

+1

Спасибо! Это очень помогло. Я в процессе понимания того, как работают классы, поэтому я могу задать много вопросов, если не могу найти ответ в своем учебнике. – Quinty

1

Относительно:

Поэтому я должен был бы создать экземпляр некоторые даты первого? Можно ли вызвать метод экземпляра без создания экземпляра какого-либо объекта даты?

Исправить. Чтобы вызвать метод экземпляра Date, вы должны сначала создать объект Date, который вы сейчас используете в своем основном методе.

Date today; // declare Date variable today 
    today = new Date(); // create instance and assign it to today 

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

+0

Спасибо! Это проясняет многое! – Quinty

1

Заявление today = new Date(); создает экземпляр class Date и присваивает ссылку этому экземпляру переменной today.

Это позволяет ссылаться на переменные и методы экземпляра, на которые можно ссылаться через переменную today. Без примера эти члены не существовали бы.

+0

О, это имеет смысл. Мы не можем назвать дату, не имея сегодня объекта для обращения к ней. Думаю, я лучше понимаю это. – Quinty

0

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

public class Date{ 
    public static String month; 
    public static int day; 
    public static int year; 
public static void writeOutput() 
{ 
    System.out.println("Today is : " + this.month + " " + this.day + " , " + this.year); 
}} 

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

Date.month = "January"; 
Date.day = 1; 
Date.year=2015; 
Date.writeOutput(); 

Таким образом, вам не нужно создавать экземпляр. Однако это не обязательно хорошая практика. Статические заводские методы хороши, если вам не нужны переменные класса, но вместо этого необходимо передать необходимые параметры. Например:

public class Date 
{ 

public void writeOutput(String year, int day, int month) 
{ 
    System.out.println("Today is : " + month + " " + day + " , " + year); 
} 
} 

Тогда вы можете позвонить

Date.writeOutput("January", 1, 1); 
+0

Не думаю, что я узнал о статических полях и фабричных методах. Я не уверен, что они означают или говорят. – Quinty

+0

@Quinty Не беспокойтесь о статических полях/методах и заводских методах при запуске. Оба являются нарушениями концепций объектно-ориентированного программирования. Это практические и удобные исключения из правил. Но сначала узнайте правила. –

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