标签: interface

抽象类和接口之间有什么区别?

假设我们有两个方法M1(),并M2()在接口.抽象类也有两个相同的抽象方法.如果任何类实现了此接口或从抽象类继承,则必须同时实现其中的方法.

所以对我来说,似乎我的场景中的接口或抽象类的行为相同.那么,任何人都可以在这个特定的情况下突出显示这两者之间的区别,并建议是否在这里使用抽象类或接口?

c# oop abstract-class interface

47
推荐指数
1
解决办法
8万
查看次数

为什么Java不允许多重继承,但允许使用默认实现符合多个接口

我不问这个 - > 为什么Java中没有多重继承,但允许实现多个接口?

在Java中,不允许多重继承,但是,在Java 8之后,Interfaces可以拥有默认方法(可以自己实现方法),就像抽象类一样.在此上下文中,还应允许多重继承.

interface TestInterface 
{ 
    // abstract method 
    public void square(int a); 

    // default method 
    default void show() 
    { 
      System.out.println("Default Method Executed"); 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

java inheritance interface abstract java-8

47
推荐指数
5
解决办法
4733
查看次数

Xcode:可以为Protocol接口所需的方法自动创建存根吗?

来自Eclipse/Java背景,我最喜欢的功能之一是能够快速存根接口所需的所有方法.在Eclipse中,我可以从源菜单中选择"覆盖/实现"来为接口的任何方法生成存根方法.

我想在Objective-C中做同样的事情.例如,如果我声明一个实现'NSCoding'协议的类,我想让Xcode自动生成实现此协议所需的方法.令我感到沮丧的是,我正在尝试实现的每个协议都需要查找然后复制/粘贴所需方法的签名.

我一直试图找出这是否可行,但还没有找到任何有希望的东西.这可能在XCode中吗?

ide xcode protocols interface objective-c

46
推荐指数
3
解决办法
3万
查看次数

interface作为Java中的方法参数

几天前我接受了采访,并抛出了这样的问题.

问:反转链表.以下代码给出:

public class ReverseList { 
    interface NodeList {
        int getItem();
        NodeList nextNode();
    }
    void reverse(NodeList node) {

    }
    public static void main(String[] args) {

    }
}
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为我不知道接口对象可以用作方法参数.面试官解释了一下,但我仍然不确定.有人可以开导我吗?

java oop interface

46
推荐指数
4
解决办法
6万
查看次数

在C++ 11中声明接口的最佳方法

众所周知,有些语言有接口的概念.这是Java:

public interface Testable {
  void test();
}
Run Code Online (Sandbox Code Playgroud)

如何以最紧凑的方式在C++(或C++ 11)中实现这一点并且代码噪声很小?我很欣赏一个不需要单独定义的解决方案(让标题足够).这是一个非常简单的方法,即使我发现越野车;-)

class Testable {
public:
  virtual void test() = 0;
protected:
  Testable();
  Testable(const Testable& that);
  Testable& operator= (const Testable& that);
  virtual ~Testable();
}
Run Code Online (Sandbox Code Playgroud)

这只是一个开始......而且已经超过了我想要的时间.怎么改进呢?也许在std命名空间的某个地方有一个基类专为此而设计?

c++ polymorphism interface abstract c++11

46
推荐指数
5
解决办法
3万
查看次数

C#缺乏多重继承是如何导致需要接口的?

C#编程语言中, Krzysztof Cwalina在一个注释中说:

我们明确决定不添加对多重继承的支持[...]缺少多重继承迫使我们添加接口的概念,这反过来又导致了框架演化,更深层次的继承层次结构等问题.问题.

接口是OO编程语言的核心概念.我不遵循"强迫我们添加接口的概念"的含义

Krzysztof是否意味着必须就接口的使用做出某些设计决策,否则将使用多重继承?或者,他interface是否因为缺乏多重继承而被引入C#?你能提供一个例子吗?

c# oop interface multiple-inheritance

46
推荐指数
3
解决办法
2525
查看次数

instanceof如何在接口上工作

instanceof可用于测试对象是否是给定类的直接或下降实例.instanceof即使接口无法像类一样实例化,也可以与接口一起使用.任何人都可以解释一下instanceof有效

java interface instanceof

45
推荐指数
4
解决办法
6万
查看次数

如何创建接口的匿名实现?

我有一个界面:

interface TileSet {
    fun contains(x: Int, y: Int) : Boolean
}
Run Code Online (Sandbox Code Playgroud)

我希望能够创建多组瓷砖(瓷砖是一对x和y整数坐标):

fun TileSet.union(another: TileSet) : TileSet = 
   // ..
Run Code Online (Sandbox Code Playgroud)

在Java 8中,我可以这样做:

@FunctionalInterface
public interface TileSet {
    boolean contains(int x, int y);

    public default TileSet unite(TileSet another) {
        return (x, y) -> TileSet.this.contains(x, y) && another.contains(x, y);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以接口是用lambda实现的TileSet#unite().或者它可以用旧的匿名类方法实现:

public default TileSet unite(TileSet another) {
    return new TileSet() {
         @Override
         public boolean contains(int x, int y) {
             return TileSet.this.contains(x, y) && another.contains(x, y);
         }
    }
} …
Run Code Online (Sandbox Code Playgroud)

interface kotlin

45
推荐指数
2
解决办法
2万
查看次数

查找Interface实例后面的具体类型

简而言之,我有一个C#函数,它对作为Object实例传入的给定Type执行任务.传入类实例时,一切正常.但是,当对象被声明为接口时,我真的很想找到具体的类并对该类类型执行操作.

这是无处不在的坏例子(金属外壳不正确等等):

public interface IA
{
    int a { get; set; }
}
public class B : IA
{
    public int a { get; set; }
    public int b { get; set; }
}
public class C : IA
{
    public int a { get; set; }
    public int c { get; set; }
}

// snip

IA myBObject = new B();
PerformAction(myBObject);

IA myCObject = new C();
PerformAction(myCObject);

// snip

void PerformAction(object myObject)
{
    Type objectType = myObject.GetType();   // …
Run Code Online (Sandbox Code Playgroud)

c# types interface concrete

44
推荐指数
3
解决办法
5万
查看次数

接口中的静态初始化

当我试着写这样的东西时:

public interface MyInterface {
    static {
        System.out.println("Hello!");
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器无法编译它.

但是当我写这样的东西时:

interface MyInterface {
    Integer iconst = Integer.valueOf(1);
}
Run Code Online (Sandbox Code Playgroud)

并反编译它,我看到静态初始化:

public interface MyInterface{
    public static final java.lang.Integer i;

    static {};
      Code:
      0:   iconst_1
      1:   invokestatic    #1; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      4:   putstatic       #2; //Field i:Ljava/lang/Integer;
      7:   return
}
Run Code Online (Sandbox Code Playgroud)

你能告诉我这个行为吗?

java interface static-initialization

44
推荐指数
3
解决办法
2万
查看次数