Klasa i metoda abstrakcyjna Java (z przykładem)

W tym samouczku dowiemy się o abstrakcyjnych klasach i metodach Java na podstawie przykładów. Dowiemy się również o abstrakcji w Javie.

Klasa abstrakcyjna Java

Nie można utworzyć instancji klasy abstrakcyjnej w Javie (nie możemy tworzyć obiektów klas abstrakcyjnych). Używamy abstractsłowa kluczowego, aby zadeklarować klasę abstrakcyjną. Na przykład,

 // create an abstract class abstract class Language ( // fields and methods )… // try to create an object Language // throws an error Language obj = new Language(); 

Klasa abstrakcyjna może mieć zarówno metody zwykłe, jak i metody abstrakcyjne. Na przykład,

 abstract class Language ( // abstract method abstract void method1(); // regular method void method2() ( System.out.println("This is regular method"); ) )

Aby dowiedzieć się więcej o metodach nieabstrakcyjnych, odwiedź stronę Metody Java. Tutaj dowiemy się o metodach abstrakcyjnych.

Metoda abstrakcyjna Java

Metoda, która nie ma swojej treści, jest nazywana metodą abstrakcyjną. Używamy tego samego abstractsłowa kluczowego do tworzenia metod abstrakcyjnych. Na przykład,

 abstract void display();

Oto display()abstrakcyjna metoda. Ciało display()jest zastąpione przez ;.

Jeśli klasa zawiera metodę abstrakcyjną, klasę należy zadeklarować jako abstrakcyjną. W przeciwnym razie wygeneruje błąd. Na przykład,

 // error // class should be abstract class Language ( // abstract method abstract void method1(); )

Przykład: Klasa i metoda abstrakcyjna Java

Chociaż nie można utworzyć instancji klas abstrakcyjnych, możemy z nich tworzyć podklasy. Następnie możemy uzyskać dostęp do członków klasy abstrakcyjnej za pomocą obiektu podklasy. Na przykład,

 abstract class Language ( // method of abstract class public void display() ( System.out.println("This is Java Programming"); ) ) class Main extends Language ( public static void main(String() args) ( // create an object of Main Main obj = new Main(); // access method of abstract class // using object of Main class obj.display(); ) )

Wynik

 To jest programowanie w Javie

W powyższym przykładzie stworzyliśmy abstrakcyjną klasę o nazwie Language. Klasa zawiera zwykłą metodę display().

Stworzyliśmy klasę Main, która dziedziczy klasę abstrakcyjną. Zwróć uwagę na oświadczenie,

 obj.display();

Tutaj obj jest obiektem klasy potomnej Main. Wywołujemy metodę klasy abstrakcyjnej za pomocą obiektu obj.

Wdrażanie metod abstrakcyjnych

Jeśli klasa abstrakcyjna zawiera jakąkolwiek metodę abstrakcyjną, wszystkie klasy potomne dziedziczone z abstrakcyjnej nadklasy muszą zapewniać implementację metody abstrakcyjnej. Na przykład,

 abstract class Animal ( abstract void makeSound(); public void eat() ( System.out.println("I can eat."); ) ) class Dog extends Animal ( // provide implementation of abstract method public void makeSound() ( System.out.println("Bark bark"); ) ) class Main ( public static void main(String() args) ( // create an object of Dog class Dog d1 = new Dog(); d1.makeSound(); d1.eat(); ) )

Wynik

 Kora kory, którą mogę zjeść.

W powyższym przykładzie stworzyliśmy abstrakcyjną klasę Animal. Klasa zawiera metodę abstrakcyjną makeSound()i nieabstrakcyjną eat().

Odziedziczyliśmy podklasę Dog z nadklasy Animal. Tutaj podklasa Dog zapewnia implementację metody abstrakcyjnej makeSound().

Następnie użyliśmy obiektu d1 klasy Dog do wywołania metod makeSound()i eat().

Uwaga : Jeśli klasa Dog nie zapewnia implementacji metody abstrakcyjnej makeSound(), Dog również należy zadeklarować jako abstrakcyjną. Dzieje się tak, ponieważ podklasa Dog dziedziczy makeSound()po Animal.

Dostęp do konstruktora klas abstrakcyjnych

Klasa abstrakcyjna może mieć konstruktory, takie jak zwykła klasa. I możemy uzyskać dostęp do konstruktora klasy abstrakcyjnej z podklasy za pomocą supersłowa kluczowego. Na przykład,

 abstract class Animal ( Animal() (… . ) ) class Dog extends Animal ( Dog() ( super();… ) )

Tutaj użyliśmy super()wewnętrznego konstruktora Dog, aby uzyskać dostęp do konstruktora Animal.

Zauważ, że superzawsze powinna być pierwszą instrukcją konstruktora podklasy. Odwiedź słowo kluczowe Java, aby dowiedzieć się więcej.

Abstrakcja Java

Głównym zastosowaniem klas i metod abstrakcyjnych jest osiągnięcie abstrakcji w Javie.

Abstrakcja to ważna koncepcja programowania obiektowego, która pozwala ukryć niepotrzebne szczegóły i pokazać tylko potrzebne informacje.

Pozwala nam to zarządzać złożonością, pomijając lub ukrywając szczegóły za pomocą prostszego, wyższego poziomu.

Praktycznym przykładem abstrakcji mogą być hamulce motocyklowe. Wiemy, co robi hamulec. Kiedy zaciągniemy hamulec, motocykl się zatrzyma. Jednak działanie hamulca jest przed nami ukryte.

Główną zaletą ukrycia działania hamulca jest to, że teraz producent może wdrożyć hamulec inaczej dla różnych motocykli, jednak to, co robi hamulec, będzie takie samo.

Weźmy przykład, który pomoże nam lepiej zrozumieć abstrakcję języka Java.

Przykład 3: Abstrakcja Java

 abstract class Animal ( abstract void makeSound(); ) class Dog extends Animal ( // implementation of abstract method public void makeSound() ( System.out.println("Bark bark."); ) ) class Cat extends Animal ( // implementation of abstract method public void makeSound() ( System.out.println("Meows "); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.makeSound(); Cat c1 = new Cat(); c1.makeSound(); ) )

Wyjście :

 Bark bark Meows

In the above example, we have created a superclass Animal. The superclass Animal has an abstract method makeSound().

The makeSound() method cannot be implemented inside Animal. It is because every animal makes different sounds. So, all the subclasses of Animal would have different implementation of makeSound().

So, the implementation of makeSound() in Animal is kept hidden.

Here, Dog makes its own implementation of makeSound() and Cat makes its own implementation of makeSound().

Note: We can also use interfaces to achieve abstraction in Java. To learn more, visit Java Interface.

Key Points to Remember

  • We use the abstract keyword to create abstract classes and methods.
  • An abstract method doesn't have any implementation (method body).
  • Klasa zawierająca metody abstrakcyjne również powinna być abstrakcyjna.
  • Nie możemy tworzyć obiektów klasy abstrakcyjnej.
  • Aby zaimplementować cechy klasy abstrakcyjnej, dziedziczymy z niej podklasy i tworzymy obiekty tej podklasy.
  • Podklasa musi przesłonić wszystkie abstrakcyjne metody klasy abstrakcyjnej. Jeśli jednak podklasa jest zadeklarowana jako abstrakcyjna, przesłanianie metod abstrakcyjnych nie jest obowiązkowe.
  • Możemy uzyskać dostęp do statycznych atrybutów i metod klasy abstrakcyjnej, używając odwołania do klasy abstrakcyjnej. Na przykład,
     Animal.staticMethod();

Interesujące artykuły...