Рубрики

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

В C ++, если у класса есть хотя бы одна чисто виртуальная функция, класс становится абстрактным. В отличие от C ++, в Java отдельное ключевое слово abstract используется для создания абстрактного класса.

// Пример абстрактного класса в Java

abstract class Shape {

    int color;

  

    // Абстрактная функция (как чисто виртуальная функция в C ++)

    abstract void draw(); 

}

Ниже приведены некоторые важные замечания об абстрактных классах в Java.

1) Как и в C ++, в Java не может быть создан экземпляр абстрактного класса, однако мы можем иметь ссылки на тип абстрактного класса.

abstract class Base {

    abstract void fun();

}

class Derived extends Base {

    void fun() { System.out.println("Derived fun() called"); }

}

class Main {

    public static void main(String args[]) { 

      

        // Раскомментирование следующей строки вызовет ошибку компилятора как

        // строка пытается создать экземпляр абстрактного класса.

        // Base b = new Base ();

  

        // У нас могут быть ссылки базового типа.

        Base b = new Derived();

        b.fun(); 

    }

}

Выход:

Derived fun() called

2) Как и C ++, абстрактный класс может содержать конструкторы в Java. И конструктор абстрактного класса вызывается при создании экземпляра унаследованного класса. Например, следующее является допустимой программой Java.

// Абстрактный класс с конструктором

abstract class Base {

    Base() { System.out.println("Base Constructor Called"); }

    abstract void fun();

}

class Derived extends Base {

    Derived() { System.out.println("Derived Constructor Called"); }

    void fun() { System.out.println("Derived fun() called"); }

}

class Main {

    public static void main(String args[]) { 

       Derived d = new Derived();

    }

}

Выход:

Base Constructor Called
Derived Constructor Called

3) В Java мы можем иметь абстрактный класс без какого-либо абстрактного метода. Это позволяет нам создавать классы, которые не могут быть созданы, но могут быть унаследованы.

// Абстрактный класс без какого-либо абстрактного метода

abstract class Base {   

    void fun() { System.out.println("Base fun() called"); }

}

   

class Derived extends Base { }

   

class Main {

    public static void main(String args[]) { 

        Derived d = new Derived();

        d.fun();

    }

}

Выход:

Base fun() called

4) Абстрактные классы также могут иметь конечные методы (методы, которые нельзя переопределить). Например, следующая программа компилируется и работает нормально.

// Абстрактный класс с финальным методом

abstract class Base {

    final void fun() { System.out.println("Derived fun() called"); }

}

   

class Derived extends Base {}

   

class Main {

    public static void main(String args[]) { 

       Base b = new Derived();

       b.fun();

    }

Выход:

Derived fun() called

Упражнение:
1. Можно ли создать абстрактный и окончательный класс в Java?
2. Возможно ли иметь абстрактный метод в последнем классе?
3. Можно ли наследовать от нескольких абстрактных классов в Java?

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

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

0.00 (0%) 0 votes