当前位置: 首页 > 知识库问答 >
问题:

接口和类有什么区别,当我可以直接实现类中的方法时,为什么我应该使用接口?

秦凯旋
2023-03-14

我知道这是一个很基本的问题,但一个面试官用一种很诡计的方式问我,我很无奈:(

我只知道一个界面的材料或理论定义,并在我工作的许多项目中实现了它。但我真的不明白这为什么有用,怎么有用。

接口方面有一点我也不懂。例如,我们使用

finally块中的conn.dispose();。但我没有看到该类实现或继承IDisposable接口(SQLConnection)类,我的意思是。我想知道怎么才能直接调用方法名。同样,我不理解Dispose方法是如何工作的,因为我们需要用我们自己的实现来实现所有接口方法的函数体。那么接口是如何被接受或命名为契约的呢?这些问题一直在我的脑海中滚动,直到现在,坦白地说,我从来没有看到任何好的线索来解释我的问题,以一种我能理解的方式。

MSDN像往常一样看起来很吓人,没有一条线是清晰的(各位,好心的原谅那些从事高级开发的人,我强烈地觉得任何代码或文章都应该达到任何看到它的人的头脑,因此像许多其他人说的,MSDN没有用处)。

面试官说:

他有5个方法,他很乐意直接在类中实现,但如果你必须去抽象类或接口,你选择哪一个,为什么?我确实回答了他所有我在各种博客上看到的东西,说抽象类和接口的优点和缺点,但他并不信服,他试图理解“为什么接口”一般。“为什么抽象类”一般情况下即使我可以实现相同的方法只一次,而不会改变它。

我在网络上找不到任何地方,我可以得到一篇文章来解释我清楚的接口和它的功能。我是许多程序员中的一员,他们仍然不知道接口(我知道我使用的理论和方法),但不满足于我清楚地理解了它。

共有1个答案

郭易安
2023-03-14

当你想要创建类似的东西时,界面是非常好的:

using System;

namespace MyInterfaceExample
{
    public interface IMyLogInterface
    {
        //I want to have a specific method that I'll use in MyLogClass
        void WriteLog();       
    }

    public class MyClass : IMyLogInterface
    {

        public void WriteLog()
        {
            Console.Write("MyClass was Logged");
        }
    }

    public class MyOtherClass : IMyLogInterface
    {

        public void WriteLog()
        {
            Console.Write("MyOtherClass was Logged");
            Console.Write("And I Logged it different, than MyClass");
        }
    }

    public class MyLogClass
    {
        //I created a WriteLog method where I can pass as a parameter any object that implements IMyLogInterface.
        public static void WriteLog(IMyLogInterface myLogObject)
        {
            myLogObject.WriteLog(); //So I can use WriteLog here.
        }
    }

    public class MyMainClass
    {
        public void DoSomething()
        {
            MyClass aClass = new MyClass();
            MyOtherClass otherClass = new MyOtherClass();

            MyLogClass.WriteLog(aClass);//MyClass can log, and have his own implementation
            MyLogClass.WriteLog(otherClass); //As MyOtherClass also have his own implementation on how to log.
        }
    }
}

在我的示例中,我可以是编写MyLogClass的开发人员,而其他开发人员可以创建他们的类,当他们想要记录时,他们实现接口IMyLogInterface。就像他们问我要在MyLogClass中使用WriteLog()方法需要实现什么一样。他们会在界面中找到答案。

 类似资料:
  • 我读过很多解释接口和抽象类之间差异的文章;这些帖子特别有用:接口和抽象类之间有什么区别?接口与抽象类(通用面向对象);然而,我找不到任何具体解决我问题的答案。 上下文:今天在课堂上,我们编写了一个接口和两个实现接口的类: 我知道这是可能的,因为它有效;我的问题是它为什么有效?我知道子类与其超类有ISA关系,但接口根本不是类,那么继承仍然适用于它们吗?实现多个接口的类是否与这些接口有ISA关系? 这

  • (1)接口 接口使用interface修饰; 接口不能实例化; 类可以实现多个接口; ①java8之前,接口中的方法都是抽象方法,省略了public abstract。②java8之后;接口中可以定义静态方法,静态方法必须有方法体,普通方法没有方法体,需要被实现; (2)抽象类 抽象类使用abstract修饰; 抽象类不能被实例化; 抽象类只能单继承; 抽象类中可以包含抽象方法和非抽象方法,非抽象

  • 在TypeScript中,当创建.d.ts源代码声明文件时,哪个更可取,为什么? 或 我能说出的区别是接口不能有静态方法,所以你必须为此使用一个类。两者都不产生任何JS输出,所以也许没关系?

  • 问题内容: 什么时候应该实现接口? 我们为什么要这样做? 它具有任何优势或安全性吗? 问题答案: 从这是什么“系列化”的事情怎么一回事?: 它使您可以获取一个对象或一组对象,将它们放在磁盘上或通过有线或无线传输机制发送,然后稍后,也许在另一台计算机上,逆转该过程:恢复原始对象。基本机制是将一个或多个对象展平为一维比特流,并将该比特流转换回原始对象。 就像《星际迷航》中的“运输者”一样,所有事情都是

  • 本文向大家介绍接口和抽象类的区别是什么?相关面试题,主要包含被问及接口和抽象类的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 考察点:抽象类 Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于: 接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。 类可以实现很多个接口,但是只能继承一个抽象类 类可以不实现抽象类和接口声明的所有方法,当然,在这种情

  • 本文向大家介绍抽象类和接口的区别是什么?相关面试题,主要包含被问及抽象类和接口的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。 构造函数:抽象类可以有构造函数;接口不能有。 实现数量:类可以实现很多个接口;但只能继承一个抽象类【java只支持单继承】。 访问修饰符:接口中的方法默认使用 pub