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

  • Если класс содержит абстрактные методы, он должен быть объявлен как абстрактный.
  • Абстрактный класс может содержать или не содержать абстрактные методы.

Без абстрактных методов, почему класс объявляется абстрактным?

Классы, которые содержат общие реализации методов для всех своих подклассов, объявляются абстрактными, например, класс Component — это Java AWT/Swings, HttpServlet в API сервлета. Подклассы компонентов: Label, Button, TextField , TextArea, List, Checkbox, CheckboxGroup, H/V Scrollbar, раскрывающийся список Свойства, которые обычно требуются во всех подклассах компонентов:

  • x, y, ширина, высота, фон, передний план, текст, видимый, активный, редактируемый, изменяемый размер. Для этих свойств требуется одна пара методов установки и получения.
  • Всего требуется 22 метода. Эти 22 метода, реализованные в 10 подклассах компонентов, вместе составляют 220 методов.
  • Вместо реализации всех 22 методов во всех подклассах. Эти методы определены только в одном классе Component.
  • Сам класс компонента не требует создания экземпляра. Следовательно, он объявлен абстрактным.

Несмотря на то, что реализации общих методов исходят из абстрактного суперкласса, если дочерние классы хотят переопределить, они могут переопределить методы суперкласса. E:\active\core\am3\javalang\oops\полиморфизм наследования абстракции\ абстрактный класс // AbstractClass.java public abstract AbstractClass { protected abstract void print(String name); } // Открытый класс AbstractClassSubClass.java. } // более слабая ошибка привилегий доступа возникает из-за того, что метод суперкласса защищен, он может перейти к подклассу вне пакета название); }*/ } // AbstractClassClient.java открытый класс AbstractClassClient { public static void main(String rags[]) { }

класс

  • К классу мы можем применить спецификатор доступа по умолчанию или общедоступный.
  • К классу по умолчанию применяется модификатор доступа.
  • Все методы реализованы в классе.
  • Класс может быть как унаследован, так и создан.

Если класс написан со спецификатором доступа по умолчанию во время компиляции, компилятор создаст в классе один конструктор по умолчанию.

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

// DefaultClass.java class DefaultClass { int i, j; } // public Class.java public class PublicClass { int i, j; } // класс AnotherDefaultClass.java AnotherDefaultClass { int i, j; // компилятор не генерирует конструктор по умолчанию // конструктор с 2 параметрами AnotherDefaultClass(int a, int b) { this.i=a; это.j=б; } AnotherDefaultClass() {} } // класс AnotherDefaultClassSubClass.java AnotherDefaultClassSubClass extends AnotherDefaultClass { int k,l; /* когда мы не пишем никакого конструктора, генерируется один конструктор по умолчанию, который будет неявно вызывать super(), затем во время компиляции компилятор говорит, что не может найти символ AnotherDefaultClass() */ // нет конструктора параметров AnotherDefaultClassSubClass() { super(); } // конструктор с двумя параметрами AnotherDefaultClassSubClass(int a, int b) { super(a,b); } // конструктор с четырьмя параметрами AnotherDefaultClassSubClass(int a, int b, int c, int d) { super(a,b); }

Первоначально опубликовано на https://techchannelwithdsk.blogspot.com.