logo

Klasa abstrakcyjna w Javie

Klasa zadeklarowana za pomocą słowa kluczowego streszczenie nazywana jest klasą abstrakcyjną Jawa . Może mieć metody abstrakcyjne i nieabstrakcyjne (metoda z ciałem).

Zanim nauczysz się klasy abstrakcyjnej Java, najpierw przyjrzyjmy się abstrakcji w Javie.

centos kontra rhel

Abstrakcja w Javie

Abstrakcja to proces ukrywania szczegółów implementacji i pokazywania użytkownikowi jedynie funkcjonalności.

W inny sposób pokazuje użytkownikowi tylko istotne rzeczy i ukrywa wewnętrzne szczegóły, na przykład wysyłanie SMS-ów, w których wpisujesz tekst i wysyłasz wiadomość. Nie znasz wewnętrznego przetwarzania dotyczącego dostarczania wiadomości.

Abstrakcja pozwala skupić się na tym, co obiekt robi, zamiast jak to robi.

Sposoby osiągnięcia abstrakcji

Istnieją dwa sposoby osiągnięcia abstrakcji w Javie

  1. Klasa abstrakcyjna (0 do 100%)
  2. Interfejs (100%)

Klasa abstrakcyjna w Javie

Klasa zadeklarowana jako abstrakcyjna jest nazywana an klasa abstrakcyjna . Może mieć metody abstrakcyjne i nieabstrakcyjne. Należy go rozszerzyć i wdrożyć jego metodę. Nie można go utworzyć.

Punkty do zapamiętania

  • Klasę abstrakcyjną należy zadeklarować za pomocą słowa kluczowego abstrakcyjnego.
  • Może mieć metody abstrakcyjne i nieabstrakcyjne.
  • Nie można go utworzyć.
  • Może mieć konstruktorzy i metody statyczne.
  • Może mieć metody końcowe, które zmuszą podklasę do niezmieniania treści metody.
Reguły dla klasy abstrakcyjnej Java

Przykład klasy abstrakcyjnej

 abstract class A{} 

Metoda abstrakcyjna w Javie

Metoda zadeklarowana jako abstrakcyjna i niemająca implementacji nazywana jest metodą abstrakcyjną.

Przykład metody abstrakcyjnej

 abstract void printStatus();//no method body and abstract 

Przykład klasy abstrakcyjnej, która ma metodę abstrakcyjną

W tym przykładzie Bike jest klasą abstrakcyjną zawierającą tylko jedno uruchomienie metody abstrakcyjnej. Jego realizację zapewnia klasa Honda.

wyrównywanie obrazów w CSS
 abstract class Bike{ abstract void run(); } class Honda4 extends Bike{ void run(){System.out.println('running safely');} public static void main(String args[]){ Bike obj = new Honda4(); obj.run(); } } 
Przetestuj teraz
 running safely 

Zrozumienie prawdziwego scenariusza zajęć abstrakcyjnych

W tym przykładzie Shape jest klasą abstrakcyjną, a jej implementację zapewniają klasy Rectangle i Circle.

Przeważnie nie wiemy o klasie implementacji (która jest ukryta dla użytkownika końcowego), a obiekt klasy implementacji jest dostarczany przez metoda fabryczna .

A metoda fabryczna to metoda zwracająca instancję klasy. O metodzie fabrycznej dowiemy się później.

W tym przykładzie, jeśli utworzysz instancję klasy Rectangle, zostanie wywołana metoda rys() klasy Rectangle.

Plik: TestAbstraction1.java

 abstract class Shape{ abstract void draw(); } //In real scenario, implementation is provided by others i.e. unknown by end user class Rectangle extends Shape{ void draw(){System.out.println('drawing rectangle');} } class Circle1 extends Shape{ void draw(){System.out.println('drawing circle');} } //In real scenario, method is called by programmer or user class TestAbstraction1{ public static void main(String args[]){ Shape s=new Circle1();//In a real scenario, object is provided through method, e.g., getShape() method s.draw(); } } 
Przetestuj teraz
 drawing circle 

Kolejny przykład klasy abstrakcyjnej w Javie

Plik: TestBank.java

 abstract class Bank{ abstract int getRateOfInterest(); } class SBI extends Bank{ int getRateOfInterest(){return 7;} } class PNB extends Bank{ int getRateOfInterest(){return 8;} } class TestBank{ public static void main(String args[]){ Bank b; b=new SBI(); System.out.println('Rate of Interest is: '+b.getRateOfInterest()+' %'); b=new PNB(); System.out.println('Rate of Interest is: '+b.getRateOfInterest()+' %'); }} 
Przetestuj teraz
 Rate of Interest is: 7 % Rate of Interest is: 8 % 

Klasa abstrakcyjna posiadająca konstruktora, element danych i metody

Klasa abstrakcyjna może mieć element danych, metodę abstrakcyjną, treść metody (metoda nieabstrakcyjna), konstruktor, a nawet metodę main().

Plik: TestAbstraction2.java

 //Example of an abstract class that has abstract and non-abstract methods abstract class Bike{ Bike(){System.out.println('bike is created');} abstract void run(); void changeGear(){System.out.println('gear changed');} } //Creating a Child class which inherits Abstract class class Honda extends Bike{ void run(){System.out.println('running safely..');} } //Creating a Test class which calls abstract and non-abstract methods class TestAbstraction2{ public static void main(String args[]){ Bike obj = new Honda(); obj.run(); obj.changeGear(); } } 
Przetestuj teraz
 bike is created running safely.. gear changed 

Reguła: Jeśli w klasie istnieje metoda abstrakcyjna, klasa ta musi być abstrakcyjna.

 class Bike12{ abstract void run(); } 
Przetestuj teraz
 compile time error 

Reguła: Jeśli rozszerzasz klasę abstrakcyjną zawierającą metodę abstrakcyjną, musisz albo zapewnić implementację tej metody, albo uczynić tę klasę abstrakcyjną.


Kolejny realny scenariusz klasy abstrakcyjnej

Klasy abstrakcyjnej można również użyć do zapewnienia implementacji metody interfejs . W takim przypadku użytkownik końcowy nie może być zmuszony do zastępowania wszystkich metod interfejsu.

Uwaga: jeśli dopiero zaczynasz przygodę z Javą, najpierw naucz się interfejsu i pomiń ten przykład.

 interface A{ void a(); void b(); void c(); void d(); } abstract class B implements A{ public void c(){System.out.println('I am c');} } class M extends B{ public void a(){System.out.println('I am a');} public void b(){System.out.println('I am b');} public void d(){System.out.println('I am d');} } class Test5{ public static void main(String args[]){ A a=new M(); a.a(); a.b(); a.c(); a.d(); }} 
Przetestuj teraz
 Output:I am a I am b I am c I am d