Абстрактный класс и метод Java (с примером)

В этом руководстве мы узнаем об абстрактных классах и методах Java с помощью примеров. Мы также узнаем об абстракции в Java.

Абстрактный класс Java

Абстрактный класс в Java не может быть создан (мы не можем создавать объекты абстрактных классов). Мы используем abstractключевое слово для объявления абстрактного класса. Например,

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

Абстрактный класс может иметь как обычные, так и абстрактные методы. Например,

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

Чтобы узнать о неабстрактных методах, посетите методы Java. Здесь мы узнаем об абстрактных методах.

Абстрактный метод Java

Метод, у которого нет своего тела, известен как абстрактный метод. Мы используем то же abstractключевое слово для создания абстрактных методов. Например,

 abstract void display();

Вот display()абстрактный метод. Тело display()заменено на ;.

Если класс содержит абстрактный метод, тогда класс следует объявить абстрактным. В противном случае выдаст ошибку. Например,

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

Пример: абстрактный класс и метод Java

Хотя абстрактные классы не могут быть созданы, мы можем создавать из них подклассы. Затем мы можем получить доступ к членам абстрактного класса, используя объект подкласса. Например,

 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(); ) )

Вывод

 Это программирование на Java

В приведенном выше примере мы создали абстрактный класс с именем Language. Класс содержит обычный метод display().

Мы создали основной класс, наследующий абстрактный класс. Обратите внимание на заявление,

 obj.display();

Здесь obj является объектом дочернего класса Main. Мы вызываем метод абстрактного класса, используя объект obj.

Реализация абстрактных методов

Если абстрактный класс включает в себя какой-либо абстрактный метод, тогда все дочерние классы, унаследованные от абстрактного суперкласса, должны обеспечивать реализацию абстрактного метода. Например,

 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(); ) )

Вывод

 Кора, кору я могу есть.

В приведенном выше примере мы создали абстрактный класс Animal. Класс содержит абстрактный метод makeSound()и не абстрактный метод eat().

Мы унаследовали подкласс Dog от суперкласса Animal. Здесь подкласс Dog обеспечивает реализацию абстрактного метода makeSound().

Затем мы использовали объект d1 класса Dog для вызова методов makeSound()и eat().

Примечание . Если класс Dog не обеспечивает реализацию абстрактного метода makeSound(), Dog также следует объявить абстрактным. Это потому, что подкласс Dog наследуется makeSound()от Animal.

Доступ к конструктору абстрактных классов

У абстрактного класса могут быть конструкторы, как у обычного класса. И мы можем получить доступ к конструктору абстрактного класса из подкласса с помощью superключевого слова. Например,

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

Здесь мы использовали super()внутренний конструктор Dog для доступа к конструктору Animal.

Обратите внимание, что superвсегда должен быть первым оператором конструктора подкласса. Посетите ключевое слово Java super, чтобы узнать больше.

Абстракция Java

В основном абстрактные классы и методы используются для достижения абстракции в Java.

Abstraction is an important concept of object-oriented programming that allows us to hide unnecessary details and only show the needed information.

This allows us to manage complexity by omitting or hiding details with a simpler, higher-level idea.

A practical example of abstraction can be motorbike brakes. We know what brake does. When we apply the brake, the motorbike will stop. However, the working of the brake is kept hidden from us.

The major advantage of hiding the working of the brake is that now the manufacturer can implement brake differently for different motorbikes, however, what brake does will be the same.

Let's take an example that helps us to better understand Java abstraction.

Example 3: Java Abstraction

 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(); ) )

Output:

 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).
  • Класс, содержащий абстрактные методы, также должен быть абстрактным.
  • Мы не можем создавать объекты абстрактного класса.
  • Чтобы реализовать возможности абстрактного класса, мы наследуем от него подклассы и создаем объекты подкласса.
  • Подкласс должен переопределять все абстрактные методы абстрактного класса. Однако, если подкласс объявлен абстрактным, не обязательно переопределять абстрактные методы.
  • Мы можем получить доступ к статическим атрибутам и методам абстрактного класса, используя ссылку на абстрактный класс. Например,
     Animal.staticMethod();

Интересные статьи...