В чем отличие расширения абстрактного класса и не абстрактного класса?

В чем разница между абстрактным классом и не абстрактным классом при расширении производных классов? Оба класса я не использовали метод переопределения и абстрактных методов (т.е. Абстрактный класс). Просто я унаследовал свойства. Что и почему предпочли класс?

Пример:

Код 1:

abstract class a {  
    protected int empnno; 
    protected String empname; 
} 

class b extends a { 
    ...
}

Код 2:

class a {  
    protected int empnno; 
    protected String empname; 
}

class b extends a { 
    ...
}

Ответ 1

Какая разница в расширении абстрактного класса и не абстрактного класса?

Абстрактные классы могут иметь абстрактные методы. Абстрактные методы - это методы без реализаций, и они должны быть реализованы вашим подклассом (если вы не внесете также свой подкласс).

Поскольку ваш класс a не имеет абстрактных методов, нет никакой разницы в том, что когда-либо с подкласса. (Единственное различие заключается в том, что если a является абстрактным, он больше не может быть создан как есть. Он может быть создан только в терминах подклассов.)

Ответ 2

Абстрактный метод - это метод, объявленный без реализации (без фигурных скобок, а затем точка с запятой), например:

abstract void moveTo(double deltaX, double deltaY);  

Если класс включает абстрактные методы, сам класс должен быть объявлен абстрактным, как в:

public abstract class GraphicObject {
   // declare fields
   // declare non-abstract methods
   abstract void draw();
}

Абстрактный класс - это класс, объявленный абстрактом - он может включать или не включать абстрактные методы. Абстрактные классы не могут быть созданы, но они могут быть подклассифицированы
Разница: -
 Абстрактные классы не могут быть созданы Обычный класс не может иметь абстрактный метод.
Ваш код: Разница B/w Code1 и code2 с кодом - свойство code1 может использоваться только по наследованию
но в коде2 вы можете сделать свой объект и использовать там свойство с объектом.

Ответ 3

Чтобы лучше понять, мы можем сравнить Абстрактные классы с интерфейсами, главными отличиями являются:

  • Хотя абстрактные классы могут содержать поля/свойства и конкретные методы, интерфейсы могут содержать только абстрактные методы (метод подписи).
  • Один класс может реализовывать несколько интерфейсов, тогда как он может распространять только один класс, абстрактный или нет.

Поэтому, когда вы создаете подкласс, расширенный абстрактный класс, вам нужно реализовать абстрактный метод, который был в абстрактном классе (если он есть), в противном случае подкласс будет по-прежнему абстрактным классом, который не может быть создан!

Кроме того, вы можете использовать интерфейсы вместо абстрактных классов, если хотите только объявить некоторые подписи методов.

Ответ 4

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

Ответ 5

Абстрактный класс будет содержать абстрактные методы, которые не имеют реализации.

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

Если вы реализуете все абстрактные методы, ваш подкласс обычно не является абстрактным (хотя нет ничего, что помешало бы вам объявить его как таковое, AFAIK).

Ответ 6

Предположим, что существует класс B, а класс A, где A продолжается. Ниже перечислены возможные сценарии:

1. B is abstract

1.1. B doesn't have abstract methods

1.1.1. A is abstract

1.1.1.1. You don't want to instantiate A. Everything is fine.

1.1.1.2. You want to instantiate A. That not possible, you can't create abstract objects

1.1.2. A is not abstract. Everything is fine

1.2. B has at least an abstract method

1.2.1. A is abstract

1.2.1.1. You don't want to instantiate A. Everything is fine.

1.2.1.2. You want to instantiate A. That not possible, you can't create abstract objects

1.2.2. A is not abstract

1.2.2.1. A doesn't implement all the abstract methods. You can't run your project until you change this

1.2.2.2. A implements all the abstract methods. Everything is fine.

2. B is not abstract

2.1. A is abstract

2.1.1. You want to instantiate A. Error.

2.1.2. You don't want to instantiate A. No problem

2.2. A is not abstract. No problem.