Klasy i metody

0

public class Vehicle {
private int numberOfWheels;
private Engine engine;

public Vehicle(Engine engine, int numberOfWheels) {
    this.engine = engine;
    this.numberOfWheels = numberOfWheels;
}

}

public class Car extends Vehicle {
private static final int NUMBER_OF_WHEELS = 4;

public Car(Engine engine) {
    super(engine, NUMBER_OF_WHEELS);
}

}

Moje pytanie brzmi co w tym kodzie oznacza Engine engine tzn spotkałem się że w konstruktorach może byś np string name albo int age ,

0

engine to referencja/wskaźnik do obiektu klasy Engine. Można np. wcześniej utworzyć taki obiekt: Engine eng = new Engine(); po czym przekazać eng w konstruktorze, tworząc obiekt klasy Car.

Pole prywatne private Engine engine, będące także referencją/wskaźnikiem do obiektu klasy Engine, zostanie zainicjalizowane referencją/wskaźnikiem z konstruktora klasy tylko, że w tym wypadku wskazującą już na konkretny obiekt, utworzony w przykładzie: Engine eng = new Engine();.

0
grzesiek51114 napisał(a):

engine to referencja/wskaźnik do obiektu klasy Engine. Można np. wcześniej utworzyć taki obiekt: Engine eng = new Engine(); po czym przekazać eng w konstruktorze, tworząc obiekt klasy Car.

Pole prywatne private Engine engine, będące także referencją/wskaźnikiem do obiektu klasy Engine, zostanie zainicjalizowane referencją/wskaźnikiem z konstruktora klasy tylko, że w tym wypadku wskazującą już na konkretny obiekt, utworzony w przykładzie: Engine eng = new Engine();.

No dobra ale to oznacza np że mogę używać jakichś konkretnych metod klasy Engine ?

0

Tak. Masz referencję wskazująca na obiekt więc możesz używać metod tego obiektu.

0
grzesiek51114 napisał(a):

Tak. Masz referencję wskazująca na obiekt więc możesz używać metod tego obiektu.

Czyli np mógłbym napisać sobie obiekt Garnek garnek = new garnek , napisać jego metody a później utworzyć konstruktor np gotowanie(Garnek garnek, int pojemność, int temperatura ) ??

0
public class Garnek {
      private double pojemnosc;

       public Garnek() { pojemnosc = 18.8; }
       public Garnek(double p) { pojemnosc = p; }
       public double getPojemnosc() { return pojemnosc; }
       public void setPojemnosc(double p) { pojemnosc = p; }
       // ... inne metody
}


public class Gotowanie {
       public Garnek garnek;
       public List<String> skladniki;

      public Gotowanie(Garnek g, List<String> s) {
             garnek = g;
             skladniki = s;
      }

     public void gotuj() {
             System.out.println("Gotuję w garnku o pojemności: " + garnek.getPojemnosc());
             System.out.println("Składniki:");
             for(String s : skladniki) 
                  System.out.println(s);
     }
}

0

W Twoim przypadku klasa Gotowanie powinna być interfejsem, który jest implementowany w klasie garnek. Nazywanie klas czasownikami jest moim zdaniem złym nawykiem.

0

Racja Gotowanie - to nie czasownik(zapędziłem się), a raczej powinienem napisać, że dobrą praktyką jest używanie rzeczowników konkretnych jako nazw klas. Czy jednak zgadzacie się, że Gotowanie mogłoby być interfejsem?

1 użytkowników online, w tym zalogowanych: 0, gości: 1