我已经了解了实现和接口的基础知识。我不明白什么时候使用接口。拥有一个接口需要什么条件?
例子:
/// Interface demo
Interface IDemo
{
// Function prototype
public void Show();
}
// First class using the interface
Class MyClass1 : IDemo
{
public void Show()
{
// Function body comes here
Response.Write("I'm in MyClass");
}
}
// Second class using the interface
Class MyClass2 : IDemo
{
public void Show()
{
// Function body comes here
Response.Write("I'm in MyClass2");
Response.Write("So, what?");
}
}
Run Code Online (Sandbox Code Playgroud)
这两个类具有相同的函数名称和不同的主体。这也可以在没有接口的情况下实现。提供方法参考的目的是什么?当我扩展超类时,至少我获得了超类的属性和方法。
请给我一个清晰的解释和一个现实世界的场景,以便我更好地理解。
我了解OOP概念的基础知识[继承,抽象,封装,多态]
我们在父子关系的情况下使用继承 [子级可以具有父级具有的所有功能,也可以为其自身添加更多功能]
并且我们将Abstract类(在Java中)用于类中方法的部分默认实现集,这也可以通过简单的Inheritance实现。
看下面的例子,这使我的观点清楚。
遗产:
家长班
public class Parent {
// This method will remain same for all child classes.No need to override
public void abc() {
System.out.println("Parent here");
}
// This methods need to be overridden from child class
public int getROI() {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
儿童班
public class Child extends Parent{
@Override
public int getROI(){
return 5;
}
public static void main(String[] args) {
Child child =new Child();
child.abc();
System.out.println(child.getROI());
}
}
Run Code Online (Sandbox Code Playgroud)
抽象类: …
我知道 byteValue() 和 shortValue() 具有与其他抽象方法不同的实现,并且是在 JDK1.1 中添加的。如果它是一个接口,这是不可能的。但是当开发人员在编写 Number 类时,他们为什么要把它变成一个抽象类呢?仅仅是因为他们预计以后可能会添加更多方法吗?我只需要权威引用支持的答案。非常感谢大家抽出时间来查看我的问题并给出答案。
看看这段代码
#include<iostream>
using namespace std;
//Shape is an Interface Class. No data and everything pure virtual
class Shape {
public:
virtual void Area(int length, int breadth) = 0;
virtual void Perimeter(int length, int breadth) = 0;
//Note, no data
};
//Derived class - Inherits Shape as Public
class Rectangle : public Shape {
public:
void Area(int length, int breadth);
void Perimeter(int length, int breadth);
private:
int someData;
};
//Derived class - Inherits Shape as Public
class Triangle : public Shape …Run Code Online (Sandbox Code Playgroud) 我看到抽象类实现接口的代码?为什么要这么做?我们可以直接将它们放在接口中,而不是将抽象成员放在接口中吗?
为什么会写这样的代码?目的或需求是什么?
所以我的问题是,为什么要使用接口或抽象类?为什么它们有用,为什么?
我在哪里可以聪明地使用它们?
可能重复:
接口与抽象类(通用OO)
我可以实例化一个Abstract类吗?如果是这样,为什么我不会将所有非密封类抽象化?
如果我无法实例化它,那么界面有什么区别?抽象类可以具有"基类"功能吗?接口和抽象类之间的区别是否更多?
interface ISample
{
int fncAdd();
}
class ibaseclass
{
public int intF = 0, intS = 0;
int Add()
{
return intF + intS;
}
}
class iChild : ibaseclass, ISample
{
int fncAdd()
{
int intTot = 0;
ibaseclass obj = new ibaseclass();
intTot = obj.intF;
return intTot;
}
}
Run Code Online (Sandbox Code Playgroud)
我想打电话ISample,static void Main(string[] args)但我不知道该怎么做.你能告诉我怎么样吗?
我正在读这篇文章,并注意到问题的第二点:
另一位采访者问我,如果你在界面中有一个Public变量,那么它与Abstract Class有什么不同?我坚持认为你不能在界面中有一个公共变量.我不知道他想听到什么,但他也不满意.
我读了答案,但除了这个以外,似乎没有人澄清这一点:
对于.Net,
你对第二个面试官的回答也是对第一个面试者的答案......抽象类可以有实现,AND状态,接口不能......
我认为面试官的答案是正确的,因为你不能在界面内有任何变量.我在这里有点困惑.任何人都可以澄清一下吗?我的问题是,为什么面试官会问这么奇怪的(?)问题?
可能的重复:
接口与抽象类(一般面向对象)
以下是我对接口、抽象类和普通类之间的困惑-
我知道抽象类可以有一个没有实现的方法,但是在基类中将方法声明为虚拟方法并在派生类中使用一些虚拟实现和覆盖有什么害处。正在寻找可以验证答案的实际场景?
当我们有了抽象类时,为什么我们需要一个接口,我知道通过接口我们可以有多重继承,并且研究了各种理论原因,寻找抽象类无法帮助你必须使用接口的实际场景?
拥有抽象类和接口不是开销吗?