Klasy i obiekty

/* Klasy.java */

// Odwołanie do zmiennych statycznych i metod statycznych
// określonych poza klasą, w której następuje odwołanie.

// Zmienne statyczne i metody statyczne są związane z klasą.
// Zmienne i metody statyczne nazywa się niekiedy zmiennymi
// i metodami klasy. Dostęp do zmiennych statycznych i metod
// statycznych określonych w danej klasie uzyskujemy przez
// nazwę danej klasy. Jeśli zmienna lub metoda statyczna,
// do której chcemy uzyskać dostęp znajduje się w tej samej
// klasie co odwołanie do niej, to nazwę klasy można pominąć.

// Metody statyczne określone w danej klasie mają bezpośredni
// dostęp tylko do zmiennych statycznych i metod statycznych
// danej klasy.

// Zmienne statyczne określa się bezpośrednio w ciele klasy,
// natomiast zmienne lokalne określa się w ciałach metod i
// konstruktorów. Zmienne statyczne i obiektowe automatycznie
// przyjmują wartości domyślne, a zmienne lokalne muszą być
// inicjowane.

class Inna
{
  static int a; // <=> static int a = 0;

  static void metodaStatyczna()
  {
    System.out.println("Metoda statyczna klasy Inna.");
    System.out.println("a = " + a); // dostęp bezpośredni
  }
}

public class Klasy
{
  public static void main(String[] args)
  {
    Inna.metodaStatyczna();
    Inna.a = 1; // dostęp przez nazwę klasy
    Inna.metodaStatyczna();
  }
}
Metoda statyczna klasy Inna.
a = 0
Metoda statyczna klasy Inna.
a = 1
Press any key to continue...
/* KlasyPrzyklad.java */

// Odwołanie do zmiennej statycznej klasy Math
// i wywołanie metody statycznej z klasy Math.
// Klasa Math należy do pakietu java.lang

public class KlasyPrzyklad
{
  public static void main(String[] args)
  {
    System.out.println("PI = " + Math.PI);
    System.out.println("2^3 = " + (int)Math.pow(2,3));
  }
}
PI = 3.141592653589793
2^3 = 8
Press any key to continue...
/* Obiekty.java */

// Klasa określa szablon, na podstawie którego można tworzyć nowe obiekty danej
// klasy. Obiekty danej klasy tworzy się przy pomocy wyrażenia rozpoczynającego
// się od słowa kluczowego new, po którym następuje nazwa konstruktora wraz
// z parametrami przekazywanymi do niego. Konstruktor obiektów danej klasy
// ma zawsze taką samą nazwę jak dana klasa. Można zatem powiedzieć, że klasa
// obiektu czyli inaczej typ obiektu określony jest przez nazwę konstruktora.
// Wyrażenie, które tworzy nowy obiekt danej klasy zwraca referencję do tego
// obiektu. Referencję do obiektu danej klasy można przypisać do zmiennej,
// która ma typ danej klasy albo typ dowolnej klasy nadrzędnej, po której
// dziedziczy dana klasa. W momencie tworzenia nowego obiektu danej klasy,
// zmienne obiektowe i metody obiektowe określone w danej klasie są kopiowane
// do tworzonego obiektu. Zmienna referencyjna pozwala odwołać się do zmiennych
// obiektowych i wywołać metody obiektowe na rzecz obiektu, do którego
// przechowuje referencję. Zachowanie obiektów określone jest przez metody
// obiektowe, a własności obiektów określone są przez zmienne obiektowe.
// Oprócz tego, klasa określa zmienne i metody statyczne, które są związane
// z samą klasą. Zachowanie klasy określone jest przez metody statyczne,
// a własności klasy określone są przez zmienne statyczne. Metody obiektowe
// wywołuje się na rzecz obiektów przez referencje do obiektów, natomiast
// metody statyczne danej klasy można wywołać przez nazwę danej klasy albo
// przez referencję, która ma typ danej klasy.

// Metody obiektowe określone w danej klasie mają bezpośredni dostęp 
// do zmiennych statycznych i obiektowych oraz metod statycznych oraz 
// innych metod obiektowych danej klasy. Metody statyczne określone
// w danej klasie mają bezpośredni dostęp tylko do zmiennych statycznych
// i metod statycznych danej klasy.

// Zmienne statyczne i obiektowe określa się bezpośrednio w ciele klasy,
// natomiast zmienne lokalne określa się w ciałach metod i konstruktorów.

class Szablon
{
  int a;        // zmienna obiektowa // <=> int a = 0;
  static int b; // zmienna statyczna // <=> static int b = 0;
  
  Szablon() // konstruktor
  {
    System.out.println("Utworzono obiekt klasy Szablon.");
  }
  
  void metodaObiektowa()
  {
    System.out.println("Metoda obiektowa klasy Szablon.");
    System.out.println("a = " + a); // dostęp bezpośredni
    System.out.println("b = " + b); //
  }
  
  static void metodaStatyczna()
  {
    System.out.println("Metoda statyczna klasy Szablon.");
    // System.out.println("a = " + a);
    System.out.println("b = " + b); // dostęp bezpośredni
  }
}

public class Obiekty
{
  public static void main(String[] args)
  {
    Szablon.b = 1;             // dostęp przez nazwę klasy
    Szablon.metodaStatyczna(); //
    
    Szablon s = new Szablon(); // tworzymy obiekt klasy Szablon
    
    s.a = 2;             // dostęp przez referencję
    s.b = 3;             //
                         //
    s.metodaObiektowa(); //
    s.metodaStatyczna(); //
  }
}
Metoda statyczna klasy Szablon.
b = 1
Utworzono obiekt klasy Szablon.
Metoda obiektowa klasy Szablon.
a = 2
b = 3
Metoda statyczna klasy Szablon.
b = 3
Press any key to continue...

Strona główna