2015-11-01 3 views
-2

Я новичок в java, и мне трудно понять эти основные понятия. Я искал это в Google, но не могу найти отличного объяснения по этому поводу, надеюсь, один из вас может мне помочь. Благодарю. Мои вопросы ...В чем разница между абстрактным классом и интерфейсом в java?

Что такое абстрактный класс?

Когда вы используете абстрактный класс и когда будете использовать интерфейс?

+0

http://www.javaworld.com/article/2077421/learn-java/abstract-classes-vs-interfaces.html –

+1

Этот вопрос, вероятно, будет отмечен как дубликат через минуту. Большинство дубликатов очень устарели. Когда вы читаете связанные ответы, убедитесь, что вы проверяете, применяются ли они к Java 8, поскольку правила были коренным образом изменены. –

+0

Также уместно: [Использование интерфейсов Java/Абстрактные классы] (http://stackoverflow.com/questions/2869222/use-of-java-interfaces-abstract-classes?rq=1) – resueman

ответ

0

Аннотация метод используется для наследования, когда Object B IS Object A. Интерфейс используется, когда Object B HAS Object A. Например, BMW - это АВТОМОБИЛЬ, но CAR не ДВИГАТЕЛЬ, автомобиль имеет ДВИГАТЕЛЬ. Но кроме этого между ними существует лишь несколько технических нюансов. Логика здесь важна.

EDIT: В связи с большим спросом, вот мой пример:

interface Engine { 
horsePower(int a); 
torque(int a); 
volume(int a); 
//... 
} 

автомобилей

abstract class Car implements Engine { 
//implement interface methods 
public abstract accelerate(int howMuch, int horsePower); 
public abstract brake(int howMuch); 
public abstract turn(int degreesOfRotation); 
//.. 
} 

И BMW

public class BMW extends Car {  
private final String carMake = "BMW"; 
private String carModel; 
// implement abstract methods of Car 
public void setModel(String s){ 
carModel = s; 
//and so on 
} 
+0

ПОЖАЛУЙСТА, дайте нам пример 'Car' и' Engine', я бы с удовольствием это увидел. И не показывайте мне/нам поле типа 'Engine', хранящееся в экземпляре' Car', потому что это нечто иное и не имеет никакого отношения к различию между абстрактными классами и интерфейсами. – Tom

+0

@Tom Отредактировано и сделано –

+0

Неплохо, этот пример следует вашим объяснениям. Но как интерфейс маркера следует за ним? Или как насчет «дефолтного» случая «MyInterface» и «MyInterfaceImpl» ... как они совпадают? И разве вы не думаете, что после вашего объяснения «Класс» имеет «интерфейс», код приведет к плохой структуре? Например, ваш «Автомобиль». Благодаря непосредственному внедрению интерфейса у вас нет изменений для внедрения различных типов двигателей (газ, дизель, электрический) без внедрения различных классов «Car», что затем приведет к все более и более неприкосновенному наследованию. – Tom

0

Есть в основном два типа классов 1 .конкретные классы 2.абстрактные классы Co ncrete классы - это классы, в которых все методы объявлены и определены, т. е. в простых словах каждый метод знает, что ему нужно делать и как это сделать. Когда речь идет об абстрактном классе простыми словами, это неполные классы, т.е. методы, которые знают, что делать, но они не знают, как это сделать. Такой метод называется абстрактным методом, а класс с одним или несколькими абстрактными методами называется абстрактным классом Важно отметить, что невозможно создать экземпляр объект абстрактного класса и класс, который наследует Ab абстрактный класс, должен определять все абстрактные методы, чтобы сам по себе стал конкретным классом и может быть создан. С другой стороны, интерфейс представляет собой набор абстрактных методов и статических конечных переменных, один из основных использование интерфейса - это преодоление проблемы множественного наследования (класс в java может распространять только один класс, но может реализовать ny количество интерфейсов)

Смежные вопросы