Программы Java используют абстрактные классы для реализации абстрактных концепций в природе. Функция абстрактного класса состоит в том, чтобы организовать множество связанных классов вместе, чтобы создать общий класс, то есть абстрактный класс, а конкретные классы, организованные им, будут производными от него в качестве его подклассов. Абстрактный класс характеризует публичное поведение и передает его производным классам посредством механизма наследования. Методы, определенные в абстрактных классах, называются абстрактными методами. Эти методы имеют только объявление заголовка метода и используют точку с запятой для замены определения тела метода, то есть определяется только форма интерфейса метода-члена без конкретных операций. . Только переопределение абстрактных методов-членов производным классом фактически реализует операции, связанные с производным классом.
После того, как каждый подкласс наследует абстрактный метод родительского класса, он переопределяет его с помощью различных операторов и тел методов, образуя несколько подклассов с одинаковым именем, одинаковым возвращаемым значением и одним и тем же списком параметров, с той же целью, но с определенными различиями в конкретных целях. реализации. Целью определения абстрактных методов в абстрактном классе является реализация интерфейса, то есть все подклассы представляют внешнему миру метод с тем же именем. Абстрактный класс — это коллекция общедоступных атрибутов всех его подклассов и класс, содержащий один или несколько абстрактных методов. Одним из больших преимуществ использования абстрактных классов является то, что вы можете в полной мере использовать эти общедоступные свойства для повышения эффективности разработки и поддержки программ. Ограничения на абстрактные классы и абстрактные методы следующие:
(1) Любой класс, модифицированный модификатором абстрактного, называется абстрактным классом. Любой метод-член, модифицированный модификатором Abstract, называется абстрактным методом.
(2) Абстрактный класс может иметь ноль или более абстрактных методов или может также содержать неабстрактные методы.
(3) В абстрактных классах нет необходимости в абстрактных методах, но классы с абстрактными методами должны быть абстрактными классами.
(4) Для абстрактных методов в абстрактном классе указываются только имя метода и его тип без написания кода его реализации.
(5) Абстрактный класс может порождать подклассы, и все абстрактные методы, определенные в абстрактном классе, должны быть реализованы в подклассах, производных от абстрактного класса.
(6) Абстрактные классы не могут создавать объекты. Работа по созданию объектов осуществляется подклассами, производными от абстрактных классов.
(7) Если в родительском классе существует абстрактный метод с таким же именем, в подклассе не может быть другого абстрактного метода с таким же именем.
(8) Abstract не может изменять один и тот же класс параллельно с Final.
(9) абстрактное не может использоваться для изменения одного и того же метода параллельно с частным, статическим, окончательным или собственным.
Язык Java предусматривает, что если класс имеет абстрактный метод, этот класс должен быть объявлен как абстрактный класс.
Когда подкласс наследует от родительского класса, если в родительском классе есть абстрактные методы, и подкласс чувствует, что он может реализовать все абстрактные методы родительского класса, тогда подкласс должен реализовать все абстрактные методы родительского класса. такой как:
/** * Подкласс Dog наследует абстрактный класс Animal и реализует абстрактный метод Enjoy * @author gacl * */class Dog расширяет Animal { /** * Класс Dog добавляет свои собственные уникальные атрибуты*/ public String FurColor public Dog; ( String n, String c) { super(n);//Вызов конструктора родительского класса Animal this.furColor = c; } @Override public void Enjoy() { System.out.println("Собака лает.. .."); }}
Если абстрактный метод родительского класса не может быть реализован подклассом, объявите подкласс как абстрактный класс, например:
/** * Подкласс Cat наследуется от абстрактного класса Animal и, естественно, наследует абстрактный метод Enjoy(), объявленный в классе Animal. * Однако подкласс Cat считает нецелесообразным реализовывать этот метод Enjoy() с помощью. сам себя, поэтому он объявляет себя как абстрактный класс, * Затем тот, кто реализует этот абстрактный метод Enjoy, и тот, кто наследует подкласс, тот, кто реализует этот абстрактный метод Enjoy(). * @author gacl * */abstract class Cat расширяет Animal { /** * Cat добавляет свои собственные уникальные атрибуты*/ public String EyeColor; public Cat(String n, String c) { super(n);//Вызов родительского класса Метод построения животного this.eyeColor = c }};
Подкласс Cat здесь наследуется от абстрактного класса Animal и, естественно, наследует абстрактный метод Enjoy(), объявленный в классе Animal. Однако подкласс Cat считает, что нецелесообразно реализовывать этот метод Enjoy() самостоятельно, поэтому он. называет себя Объявленным как абстрактный класс, затем тот, кто реализует абстрактный метод Enjoy, и тот, кто наследует подкласс, затем реализует абстрактный метод Enjoy(). нравиться:
/** * Подкласс BlueCat наследует абстрактный класс Cat и реализует абстрактный метод Enjoy, унаследованный от родительского класса Cat * @author gacl * */class BlueCat расширяет Cat { public BlueCat(String n, String c) { super(n , c); } /** * Реализует абстрактный метод Enjoy */ @Override public void Enjoy() { System.out.println("Синяя кошка мяукает..." } }
Полный тестовый код выглядит следующим образом:
package javastudy.summary;/** * Родительский класс Animal * Добавьте абстрактный класс перед классом, то есть объявите его следующим образом: абстрактный класс Animal * Таким образом, класс Animal становится абстрактным классом */abstract class Animal { public String name; public Animal(String name) { this.name = name } /** * Абстрактный метод * Существует только определение метода, но нет его реализации. */ public Abstract void Enjoy(); }/** * Подкласс Cat здесь наследуется от абстрактного класса Animal и, естественно, наследует абстрактный метод Enjoy(), объявленный в классе Animal, * но подкласс Cat считает, что так и должно быть. реализованный сам по себе Этот метод Enjoy() также не подходит, поэтому он объявляет себя как абстрактный класс * Затем, тот, кто реализует этот абстрактный метод Enjoy, и тот, кто наследует подкласс, тот, кто реализует этот абстрактный метод, Enjoy(). * @author gacl * */abstract class Cat расширяет Animal { /** * Cat добавляет свои собственные уникальные атрибуты*/ public String EyeColor; public Cat(String n, String c) { super(n);//Вызов родительского класса Метод создания животного this.eyeColor = c; }}/** * Подкласс BlueCat наследует абстрактный класс Cat и реализует абстрактный метод, унаследованный от родительского класса Cat * @author gacl * */class BlueCat расширяет Cat { public BlueCat(String n, String c) { super(n, c } /** * Реализует абстрактный метод Enjoy */ @Override public void Enjoy() { System.out.println("Blue Cat meows. .."); } }/** * Подкласс Dog наследует абстрактный класс Animal и реализует абстрактный метод Enjoy * @author gacl * */class Dog расширяет Animal { /** * Класс Dog добавляет свои собственные уникальные атрибуты * /публичная строка FurColor; public Dog(String n, String c) { super(n);//Вызов конструктора родительского класса Animal this.furColor = c; } @Override public void Enjoy() { System.out.println("Dog; лает ...."); }} public class TestAbstract { /** * @param args */ public static void main(String[] args) { /** * После того как класс Cat объявлен как абстрактный класс, экземпляр класса Cat не может быть создан. * Поскольку абстрактный класс неполный и в нем отсутствуют руки и ноги, экземпляр абстрактного класса не может быть создан. */ //Cat c = new Cat("Catname","blue"); Dog d = new Dog("dogname","black");//Вызовите метод Enjoy, который вы реализовали c. = new BlueCat("BlueCatname","blue"); c.enjoy();//Вызов реализованного вами метода Enjoy.}}