В Java почему нам нужен объект для вызова функции в главной функции того же класса, но нет объекта для другой функции, которая не является основной? - PullRequest
0 голосов
/ 12 марта 2020

Я хотел бы привести пример:

    1 public class Ticket
    2 {
    3     private int ticketid;
    4     private  int price;
    5     private  int availableTickets;
    6     public void setTicketid(int ticketid)
    7     {
    8         this.ticketid=ticketid;
    9     }
   10     public void setPrice(int price)
   11     {
   12         this.price=price;
   13         
   14     }
   15     public  void setAvailableTickets(int availableTickets)
   16     {
   17         if(availableTickets>0)
   18         {
   19             this.availableTickets=availableTickets;
   20         }
   21     }
   22     public int getTicketid()
   23     {
   24         return ticketid;
   25     }
   26     public int getPrice()
   27     {
   28         return price;
   29     }
   30     public  int getAvailableTickets()
   31     {
   32         return availableTickets;
   33     }
   34     public int calculateTicketCost(int nooftickets)
   35     {
   36         
   37         int at=getAvailableTickets();
   38         int ans;
   39         int p;
   40         if(nooftickets<at)
   41         {
   42             at=at-nooftickets;
   43             setAvailableTickets(at);
   44              p=getPrice();
   45             System.out.println(p+"p");
   46             ans=nooftickets*p;
   47             return ans;
   48             
   49         }
   50         else
   51         {
   52             return -1;
   53         }
   54     }
   55 }

Почему мы можем использовать getAvailableTickets(), setAvailableTickets() и getPrice() без объекта в функции calcTicketCost (), но если мы попробовали эти методы в методе main вместо функции calcTicketCost (), нам бы понадобился объект для использования этих трех функций.

Скажите, пожалуйста, почему объект не нужен. Tysm.

Ответы [ 3 ]

0 голосов
/ 12 марта 2020
Методы

stati c существуют в безобъектном «безвыходном» контексте. У вас есть только переменные stati c, параметры методов и другие методы stati c. Нестатистические c методы имеют контекст объекта / данных.

Пример использования методов объекта: у вас есть метод Employee. Имя этого сотрудника, его идентификатор и т. Д. c указывается c для этого сотрудника.

Пример метода stati c: преобразование угла из градусов в радианы. Этот метод не нуждается в контексте - ему просто нужен параметр градусов

0 голосов
/ 13 марта 2020

В контексте stati c вы можете вызывать методы stati c без создания экземпляра. Ваш вопрос заключается в том, почему вы не можете получить доступ к методу nonstati c без создания экземпляра из контекста stati c.

Метод stati c является общим (фиксированным и постоянным) для каждого экземпляра, который вы можете объявить. Все нестатические методы c могут обращаться к одному и тому же методу stati c. С другой стороны, если вы хотите вызвать метод нестати c из метода stati c, какой метод нестати c вы хотите вызвать? В памяти нет существующего метода c, который существует до создания экземпляра класса. Вы можете создать множество их копий, создав экземпляр класса, а затем получить к ним доступ в статическом c контексте.

Во-вторых, вы можете получить доступ к нестатическому c методу из другого нештатного c метода без создание экземпляра. Почему это происходит? Это происходит потому, что метод nonstati c появляется только тогда, когда создается экземпляр соответствующего класса. И когда вы создаете экземпляр, это означает, что оба метода существуют в этом экземпляре, и они могут получить доступ друг к другу без него.

0 голосов
/ 12 марта 2020

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

, и если ваш метод main находится внутри класса, вы можете используйте методы основного метода без создания объекта, но ваши методы должны быть static

Также отметьте это, пожалуйста Java OOP

...