在我的一次采访中,我被要求解释接口类和抽象类之间的区别。
以下是我的回答:
Methods of a Java interface are implicitly abstract
and cannot have implementations. A Java abstract class can have
instance methods that implements a default behaviour.
Variables declared in a Java interface are by default final. An
abstract class may contain non-final variables.
Members of a Java interface are public by default. A Java abstract
class can have the usual flavours of class members like private,
protected, etc.
A Java interface should be implemented using keyword “implements”; A
Java abstract class should be extended using keyword “extends”.
An interface can extend another Java interface only, an abstract class
can extend another Java class and implement multiple Java interfaces.
A Java class can implement multiple interfaces but it can extend only
one abstract class.
然而,面试官并不满意,他告诉我这种描述代表了“书本知识”。
他让我给出一个更实际的回答,用实际的例子解释我什么时候会选择抽象类而不是接口。
我哪里错了?
接口与抽象类的基本区别在于,接口支持多重继承,而抽象类不支持。
在抽象类中,你也可以提供所有的抽象方法,比如接口。
为什么需要抽象类?
在某些情况下,当处理用户请求时,抽象类并不知道用户的意图。在该场景中,我们将在类中定义一个抽象方法,并询问用户谁扩展了这个类,请在抽象方法中提供您的意图。在这种情况下,抽象类非常有用
为什么需要接口?
比如说,我有一份工作,但我在这方面没有经验。的例子,
如果你想建造一座建筑或大坝,那么在这种情况下你会怎么做?
你将确定你的需求是什么,并根据这些需求制定一份合同。
然后打电话给投标者来构建你的项目
无论谁建造这个项目,都应该满足你的要求。但是不同厂商的构造逻辑是不同的。
这里我不关心它们是如何构造的。最终的目标是否满足我的要求,这只是我的关键点。
在这里,你的需求称为接口,构造函数称为实现者。
嗯,现在人们渴望实用的方法,你说得很对,但大多数面试官看起来是按照他们目前的要求,想要一个实用的方法。
回答完你的问题后,你应该跳到例子上:
文摘:
例如,我们有一个工资函数,它有一些对所有员工共同的参数。然后我们可以有一个叫做CTC的抽象类,它带有部分定义的方法体,它将被所有类型的员工扩展,并根据他们的额外工资得到补偿。
对于公共功能。
public abstract class CTC {
public int salary(int hra, int da, int extra)
{
int total;
total = hra+da+extra;
//incentive for specific performing employee
//total = hra+da+extra+incentive;
return total;
}
}
class Manger extends CTC
{
}
class CEO extends CTC
{
}
class Developer extends CTC
{
}
接口
Java中的接口允许在不扩展接口功能的情况下拥有接口功能,你必须清楚你想在应用程序中引入的功能签名的实现。它会迫使你做出定义。
不同的功能。
public interface EmployeType {
public String typeOfEmployee();
}
class ContarctOne implements EmployeType
{
@Override
public String typeOfEmployee() {
return "contract";
}
}
class PermanentOne implements EmployeType
{
@Override
public String typeOfEmployee() {
return "permanent";
}
}
通过将methgos定义为抽象类,你也可以对抽象类进行这样的强制活动,现在一个扩展抽象类的类仍然是抽象类,直到它覆盖抽象函数。
接口与抽象类的基本区别在于,接口支持多重继承,而抽象类不支持。
在抽象类中,你也可以提供所有的抽象方法,比如接口。
为什么需要抽象类?
在某些情况下,当处理用户请求时,抽象类并不知道用户的意图。在该场景中,我们将在类中定义一个抽象方法,并询问用户谁扩展了这个类,请在抽象方法中提供您的意图。在这种情况下,抽象类非常有用
为什么需要接口?
比如说,我有一份工作,但我在这方面没有经验。的例子,
如果你想建造一座建筑或大坝,那么在这种情况下你会怎么做?
你将确定你的需求是什么,并根据这些需求制定一份合同。
然后打电话给投标者来构建你的项目
无论谁建造这个项目,都应该满足你的要求。但是不同厂商的构造逻辑是不同的。
这里我不关心它们是如何构造的。最终的目标是否满足我的要求,这只是我的关键点。
在这里,你的需求称为接口,构造函数称为实现者。