JavaRush /Blog Java /Random-PL /Przerwa kawowa #111. Polimorfizm i wiązanie dynamiczne w ...

Przerwa kawowa #111. Polimorfizm i wiązanie dynamiczne w Javie. Pętla For w Javie + przykład składni pętli forEach

Opublikowano w grupie Random-PL

Polimorfizm i wiązanie dynamiczne w Javie

Źródło: DZone Polimorfizm jest jedną z podstawowych koncepcji programowania obiektowego. Niezależnie od tego, czy dopiero zaczynasz programować w Javie, czy jesteś doświadczonym programistą, powinieneś wiedzieć, czym jest polimorfizm i jak działa. Większość programistów twierdzi, że jest dobrze zorientowana w tym temacie, jednak jeśli chodzi o inne złożone funkcje, takie jak wiązanie statyczne i dynamiczne, wielu z nich traci pewność siebie. Przerwa kawowa #111.  Polimorfizm i wiązanie dynamiczne w Javie.  Pętla For w Javie + przykład składni pętli forEach - 1

Co to jest polimorfizm w Javie?

Polimorfizm oznacza posiadanie wielu form. W programowaniu odnosi się to do zdolności sygnału lub komunikatu do pojawienia się w więcej niż jednej formie.

Przykład z życia wzięty

Osoba może wykazywać wiele cech jednocześnie. Na przykład matka może być jednocześnie żoną, córką, siostrą, pracownikiem firmy i tak dalej. Dlatego dana osoba może wykazywać różne cechy w różnych warunkach. Nazywa się to polimorfizmem.

Znaczenie polimorfizmu

Polimorfizm jest jedną z najważniejszych cech każdego obiektowego języka programowania (na przykład Java). Za pomocą polimorfizmu to samo zadanie można wykonać na różne sposoby.

Rodzaje polimorfizmu

W Javie polimorfizm można podzielić na dwie kategorie:
  1. Polimorfizm w czasie kompilacji (łączenie statyczne)
  2. Polimorfizm środowiska wykonawczego (środowisko wykonawcze, wiązanie dynamiczne)

Polimorfizm w czasie kompilacji

Polimorfizm w czasie kompilacji jest również znany jako łączenie statyczne. Ten typ polimorfizmu można osiągnąć poprzez przeciążenie funkcji lub przeciążenie operatora. Ale w Javie ogranicza się to do przeciążania funkcji, ponieważ Java nie obsługuje przeciążania operatorów. Przeciążanie funkcji Jeśli istnieją co najmniej dwie funkcje lub metody o tej samej nazwie funkcji, ale liczba zawartych w nich parametrów jest różna lub co najmniej jeden typ danych odpowiedniego parametru jest inny (lub oba), wówczas nazywa się to funkcją lub przeciążanie metod, a funkcje te są znane jako funkcje przeciążone. Przykład 1 Do tej pory badaliśmy, czym jest przeciążenie funkcji. Spróbujmy teraz zademonstrować przeciążenie funkcji oprogramowania.
class Main {

    // Method 1
    // Method with 2 integer parameters
    static int Addition(int a, int b)
    {

        // Returns sum of integer numbers
        return a + b;
    }
    // Method 2
    // having the same name but with 2 double parameters
    static double Addition(double a, double b)
    {
        // Returns sum of double numbers
        return a + b;
    }
    public static void main(String args[]) {

        // Calling method by passing
        // input as in arguments
        System.out.println(Addition(12, 14));
        System.out.println(Addition(15.2, 16.1));

    }
}
Powyższy program możesz uruchomić tutaj . Wyjaśnienie programu:
  • Powyższy program składa się z dwóch funkcji statycznych o tych samych nazwach: Dodawanie .

  • Tutaj obie funkcje zawierają tę samą liczbę parametrów, ale odpowiadające im parametry są różne.

  • Metoda 1 akceptuje dwa parametry całkowite, natomiast Metoda 2 akceptuje dwa parametry podwójne .

  • Z funkcji głównej wywołujemy najpierw funkcję Dodawanie(12, 14) . Przekazywane parametry są liczbami całkowitymi (12 i 14), dlatego w tym miejscu zostanie wywołana Metoda 1 .

  • Następnie wywołaliśmy funkcję Dodawanie(15.2, 16.1) . Ponieważ przekazane parametry mają podwójny typ danych (15.2 i 16.1), tym razem zostanie wywołana Metoda 2 .

  • W ten sposób osiąga się przeciążenie funkcji w Javie w oparciu o różne typy danych parametrów.

Przykład 2 Rozważmy poniższy program:
class Main {

    // Method 1
    // Method with 2 integer parameters
    static int Addition(int a, int b)
    {

        // Returns sum of integer numbers
        return a + b;
    }

    // Method 2
    // having the same name but with 3 integer parameters
    static double Addition(double a, double b)
    {

        // Returns sum of integer numbers
        return a + b;
    }
    public static void main(String args[]) {

        // Calling method by passing
        // input as in arguments
        System.out.println(Addition(12, 14));
        System.out.println(Addition(15.2, 16.1));

    }
}
Powyższy program możesz uruchomić tutaj . Wyjaśnienie programu:
  • Powyższy program składa się z dwóch funkcji statycznych o tych samych nazwach: Dodawanie .

  • W tym przypadku obie funkcje zawierają różną liczbę parametrów, ale typ danych dwóch pierwszych odpowiadających im parametrów jest taki sam (liczba całkowita).

  • Metoda 1 przyjmuje dwa parametry typu całkowitego, a metoda 2 trzy parametry typu danych typu całkowitego.

  • Z funkcji głównej wywołujemy najpierw funkcję Dodawanie(2, 3) . Ponieważ przekazane parametry są liczbami całkowitymi (2 i 3), wywołają tutaj Metodę 1 .

  • Następnie wywołaliśmy funkcję Dodawanie(4, 5, 6) . Przekazywane parametry są podwójnymi typami danych (4, 5, 6), więc tym razem wywołają Metodę 2 .

  • W ten sposób funkcje są przeciążane w Javie w oparciu o różną liczbę parametrów.

Przykład 3
class Main {

    // Method 1
    // Method with 2 integer parameters
    static int Addition(int a, int b)
    {
        // Return the sum
        return a + b;
    }
    // Method 2
    // having the same name but with 3 parameters
    // 1st parameter is of type double and other parameters
    // are of type integer
    static double Addition(double a, int b,  int c)
    {
        // Return the sum
        return a + b + c;
    }
    public static void main(String args[]) {

        // Calling method by passing
        // input as in arguments
        System.out.println(Addition(2, 4));
        System.out.println(Addition(4.2, 6, 10));

    }
}
Powyższy program możesz uruchomić tutaj . Wyjaśnienie programu:
  • Powyższy program składa się z dwóch funkcji statycznych o tych samych nazwach: Dodawanie .

  • Obie funkcje zawierają różną liczbę parametrów i typ danych pierwszego odpowiedniego elementu jest również inny.

  • Metoda 1 przyjmuje dwa parametry całkowite, natomiast Metoda 2 trzy parametry — pierwszy jest typu double, a pozostałe dwa są typami danych całkowitych.

  • Z funkcji głównej wywołujemy najpierw funkcję Dodawanie(2, 4) . Ponieważ przekazane parametry są liczbami całkowitymi (2 i 4), wywołają tutaj Metodę 1 .

  • Następnie wywołaliśmy funkcję Dodawanie(4.2, 6, 10) . Pierwszy przekazany parametr jest typu całkowitego, a pozostałe parametry są typu danych double (4.2, 6, 10), więc tym razem zostanie wywołana Metoda 2 .

  • W ten sposób Java osiąga przeciążenie funkcji w oparciu o różną liczbę parametrów, a także różne typy danych odpowiednich parametrów.

Notatka. Funkcja nie może być przeciążana wyłącznie na podstawie typu zwracanego przez funkcję.

Polimorfizm środowiska wykonawczego

Ta opcja jest również nazywana łączeniem dynamicznym. W tym procesie wywoływanie funkcji utworzonej dla innej funkcji jest dozwolone tylko w czasie wykonywania. Możemy osiągnąć dynamiczne wiązanie w Javie za pomocą przesłaniania metod.

Zastąpienie metody

Przesłanianie metod w Javie ma miejsce, gdy metoda w klasie bazowej ma definicję w klasie pochodnej. Metoda lub funkcja klasy bazowej nazywana jest metodą przesłoniętą.
// Class 1
class Parent {

    // Print method
    void Print()
    {

        // Print statement
        System.out.println("Inside Parent Class");
    }
}

// Class 2
class Child1 extends Parent {

    // Print method
    void Print() { System.out.println("Inside Child1 Class"); }
}

// Class 3
class Child2 extends Parent {

    // Print method
    void Print()
    {
        // Print statement
        System.out.println("Inside Child2 Class");
    }
}

class Main {

    public static void main(String args[]) {

        // Creating an object of class Parent
        Parent parent = new Parent();
        parent.Print();

        // Calling print methods
        parent = new Child1();
        parent.Print();

        parent = new Child2();
        parent.Print();
    }
}
Powyższy program możesz uruchomić tutaj . Wyjaśnienie programu:
  • Powyższy program składa się z trzech klas: Rodzic ( klasa 1 ), Dziecko1 ( klasa 2 ) i Dziecko2 ( klasa 3 ). Klasa 2 i klasa 3 dziedziczą klasę 1 .

  • Rodzic ma metodę o nazwie Print() . Wewnątrz tej funkcji drukujemy „ Wewnątrz klasy nadrzędnej ”. Child1 i Child2 mają także funkcje Print() , które zasadniczo zastępują funkcję Print() klasy Parent i wypisują odpowiednio „ Inside Child1 Class ” i „ Inside Child2 Class ” na konsoli.

  • Z funkcji main tworzymy najpierw obiekt klasy nadrzędnej o nazwie parent. Następnie używamy tego obiektu do wywołania metody print klasy nadrzędnej . Dlatego na konsoli zostanie wydrukowana informacja „ Wewnątrz klasy nadrzędnej ”.

  • Następnie wywołujemy domyślny konstruktor klasy Child1 i wywołujemy funkcję Print() . Należy zauważyć, że metoda Print() zdefiniowana w klasie Child1 zostanie teraz wywołana , ponieważ zastąpiliśmy metodę Print() klasy nadrzędnej . Dlatego na konsoli zostanie wydrukowana informacja „ Inside Child1 Class ”.

  • Na koniec wywołujemy domyślny konstruktor klasy Child2 i wywołujemy funkcję Print() . Tutaj zostanie wywołana metoda Print() zdefiniowana w klasie Child2 , ponieważ nadpisaliśmy metodę Print() klasy nadrzędnej . Dlatego na konsoli zostanie wydrukowana informacja „ Inside Child2 Class ”.

  • W ten sposób w Javie osiąga się nadpisywanie metod.

Wyniki

W tym artykule dowiedzieliśmy się, czym jest polimorfizm w Javie. Następnie zagłębiliśmy się w temat i omówiliśmy dwa typy polimorfizmu w Javie: polimorfizm w czasie kompilacji i polimorfizm w czasie wykonywania. Za pomocą programów pokazaliśmy, jak można osiągnąć statyczne i dynamiczne wiązanie w Javie.

Pętla For w Javie + przykład składni pętli forEach

Źródło: FreeCodeCamp Pętla w programowaniu to sekwencja instrukcji, które są wykonywane w sposób ciągły, aż do spełnienia określonego warunku. W tym artykule dowiemy się o pętlach for i forEach w Javie. Przerwa kawowa #111.  Polimorfizm i wiązanie dynamiczne w Javie.  Pętla For w Javie + przykład składni pętli forEach - 2

Dla składni pętli w Javie

Oto składnia tworzenia pętli for :
for (initialization; condition; increment/decrement) {
   // code to be executed
}
Przyjrzyjmy się niektórym słowom kluczowym w kodzie:
  • for wskazuje, że utworzymy pętlę. Po nim następują nawiasy, które zawierają wszystko, czego potrzebujemy, aby nasza pętla działała.

  • inicjalizacja definiuje zmienną początkową jako punkt początkowy pętli, zwykle liczbę całkowitą.

  • Warunek określa, ile razy pętla powinna zostać wykonana.

  • inkrementacja / dekrementacja zwiększa/zmniejsza wartość zmiennej początkowej przy każdym uruchomieniu pętli. Gdy wartość zmiennej rośnie/maleje, dąży ona do określonego warunku.

  • Należy pamiętać, że każde słowo kluczowe jest oddzielone średnikiem ( ; ).

Oto kilka przykładów:
for(int x = 1; x <=5; x++) {
  System.out.println(x);
}

/*
1
2
3
4
5
*/
W powyższym przykładzie zmienną początkową jest x o wartości 1. Pętla będzie działać tak długo, jak wartość x będzie mniejsza lub równa 5 – taki jest warunek. x++ zwiększa wartość x po każdym uruchomieniu. Kontynuowaliśmy drukowanie wartości x , która kończy się po 5, ponieważ warunek został spełniony. Zwiększenie do 6 nie jest możliwe, ponieważ jest większe i nierówne 5. W poniższym przykładzie użyjemy pętli for , aby wydrukować wszystkie wartości z tablicy.
int[] randomNumbers = {2, 5, 4, 7};
for (int i = 0; i < randomNumbers.length; i++) {
  System.out.println(randomNumbers[i]);
}

// 2
// 5
// 4
// 7
To prawie to samo, co w ostatnim przykładzie. Tutaj użyliśmy długości tablicy jako warunku, a początkową wartość zmiennej jako zero, ponieważ liczba porządkowa pierwszego elementu tablicy wynosi zero.

Składnia pętli forEach w Javie

Pętla forEach służy specjalnie do iteracji po elementach tablicy. Tak wygląda jego składnia:
for (dataType variableName : arrayName) {
  // code to be executed
}
Zauważysz, że składnia tutaj jest krótsza niż w przypadku pętli for . Pętla forEach również zaczyna się od słowa kluczowego for . Zamiast inicjować zmienną wartością, najpierw określamy typ danych (musi odpowiadać typowi danych tablicy). Po tym następuje nazwa naszej zmiennej i nazwa tablicy , oddzielone dwukropkiem. Oto przykład, który pomoże Ci lepiej zrozumieć składnię:
int[] randomNumbers = {2, 5, 4, 7};
for (int x : randomNumbers) {
  System.out.println(x + 1);
}

/*
3
6
5
8
*/
W tym przykładzie wykonaliśmy iterację po każdym elemencie i zwiększyliśmy jego wartość początkową o 1. Domyślnie pętla zatrzymuje się po przejściu przez wszystkie elementy tablicy. Oznacza to, że nie musimy przekazywać żadnej wartości do naszej zmiennej ani określać żadnego warunku, aby pętla się zakończyła.

Wniosek

W tym artykule dowiedzieliśmy się, czym są pętle i jaka jest składnia tworzenia pętli for i forEach w Javie. Widzieliśmy także kilka przykładów, które pomogły nam zrozumieć, kiedy i jak z nich korzystać. Miłego kodowania!
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION