相关疑难解决方法(0)

接口与抽象类(通用OO)

我最近接受过两次电话采访,其中我被问及接口和抽象类之间的区别.我已经解释了他能想到的每一个方面,但似乎他们在等我提一些具体的东西,我不知道它是什么.

根据我的经验,我认为以下是正确的.如果我错过了重点,请告诉我.

接口:

在接口中声明的每个单独的方法都必须在子类中实现.接口中只能存在事件,代理,属性(C#)和方法.一个类可以实现多个接口.

抽象类:

只有抽象方法必须由子类实现.Abstract类可以有实现的常规方法.Abstract类还可以在Events,Delegates,Properties和Methods旁边有类变量.由于C#中不存在多重继承,因此类只能实现一个抽象类.

  1. 毕竟,面试官想出了一个问题"如果你有一个只有抽象方法的抽象类怎么办?那么它与界面会有什么不同?" 我不知道答案,但我认为这是上面提到的继承权吗?

  2. 另一位采访者问我,如果你在界面中有一个Public变量,那么它与Abstract Class有什么不同?我坚持认为你不能在界面中有一个公共变量.我不知道他想听到什么,但他也不满意.

另见:

oop abstract-class interface

1372
推荐指数
30
解决办法
69万
查看次数

我该如何解释Interface和Abstract类之间的区别?

在我的一次访谈中,我被要求解释InterfaceAbstract类之间的区别.

这是我的回答:

Java接口的方法是隐式抽象的,不能有实现.Java抽象类可以具有实现默认行为的实例方法.

在Java接口中声明的变量默认为final.抽象类可能包含非最终变量.

默认情况下,Java接口的成员是公共的.Java抽象类可以具有类似私有,受保护等类通常的类成员.

应使用关键字"implements"实现Java接口; 应使用关键字"extends"扩展Java抽象类.

接口只能扩展另一个Java接口,抽象类可以扩展另一个Java类并实现多个Java接口.

Java类可以实现多个接口,但它只能扩展一个抽象类.

然而,面试官并不满意,并告诉我这个描述代表了" 书本知识 ".

他告诉我一个更实际的回答,解释我何时会使用实际例子在界面上选择一个抽象类.

我哪里做错了?

java oop inheritance abstract-class interface

456
推荐指数
13
解决办法
42万
查看次数

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

子类OOP的局限性

在java中,围绕一个减少超类功能的子类设计的好方法是什么?

例如,考虑具有"See"函数的类"Man"和不应该具有该函数的子类"BlindMan",但应该具有"Man"具有的所有其他内容.

我能想出的唯一解决方案是使用抽象类"Man"和两个子类"SeeingMan"和"BlindMan",SeeinMan添加了一个"See"功能.

但是这个解决方案的问题在于,如果我现在想要添加一个"DeafMan"类 - 它会扩展什么?SeeingMan?如果那个男人既聋又瞎眼怎么办?

java oop

22
推荐指数
3
解决办法
1291
查看次数

Java 8是否支持多重继承?

我在Java 8中读取接口时遇到过这个主题,有些情况下我们使用default或static关键字在接口中定义方法,允许下一个子节点重新定义相同的方法或实现它.这意味着多重继承吗?还有一个问题我发现,返回类型必须是co-variant类型,否则编译问题,这意味着它仍然不支持多重继承?我们可以说java支持多重继承吗?让我了解有关此主题的更多详细信息.

java

10
推荐指数
1
解决办法
9375
查看次数

"B类不能是C的超级接口;超级接口必须是接口"错误

我们假设我有这个界面A:

interface A
{
    void doThis();
    String doThat();
}
Run Code Online (Sandbox Code Playgroud)

所以,我想要一些抽象类来实现方法doThis()而不是doThat()方法:

abstract class B implements A
{
    public void doThis()
    {
        System.out.println("do this and then "+ doThat());
    }

}

abstract class B2 implements A
{
    public void doThis()
    {
        System.out.println(doThat() + "and then do this");
    }
}
Run Code Online (Sandbox Code Playgroud)

当你最终决定在常规类中实现de doThat方法时会出现错误:

public class C implements B
{
    public String doThat()
    {
        return "do that";
    }
}
Run Code Online (Sandbox Code Playgroud)

这个课让我看到上面提到的错误:

"B类不能是C的超级接口;超级接口必须是接口"

如果这个类的层次结构有效或者我应该采取其他方式,那么现在任何人都可以吗?

java

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

为什么 Typescript 允许实现抽象类?

我会阅读有关打字稿的内容classabstract class并且确实发现了一些非常有趣的东西。

Typescript allows us to implement classes.

我什至创建了一个stackblitz项目来测试它。

无论如何,我已经在这里找到了一般差异,以及它在此处的打字稿中的行为是什么。

我知道它可以用来为测试创建模拟。

为什么打字稿允许的话,如果在其他非常流行的语言(JavaC#,...),这是“禁止”?此功能是否还有其他重要应用?

extends interface class implements typescript

5
推荐指数
1
解决办法
88
查看次数

当'B'延伸'A'时,为什么要实现接口'A'和'B'

假设我有以下代码......

interface A{
  void a();
}

interface B extends A{
  void b();
}

class ImplementOne implements B{ 
  public void a(){};
  public void b(){};
}     

class ImplementTwo implements B, A{ 
  public void a(){};
  public void b(){};
} 
Run Code Online (Sandbox Code Playgroud)

无论类ImplementTwo是实现B和A,还是只实现B,它仍然需要在接口A中实现方法a(),因为接口B扩展了接口A.是否有任何理由明确地做

...implements B, A
Run Code Online (Sandbox Code Playgroud)

而不仅仅是

...implements B  
Run Code Online (Sandbox Code Playgroud)

java interface class

4
推荐指数
1
解决办法
703
查看次数

我可以同时使用工具和扩展吗?

我可以同时使用工具和扩展吗?因为我需要在同一个类上使用工具时继承其他类的东西.

public class DetailActivity extends AppCompatActivity
implementsView.OnClickListener "extends ListActivity" 
Run Code Online (Sandbox Code Playgroud)

怎么会这样?

java android

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

抽象类和多重继承

我们可以通过使用抽象类来实现与接口相同的功能,那么为什么java不允许以下代码呢?

abstract class Animals
{
    public abstract void run();
}

abstract class Animals1
{
    public abstract void run1();
}

class Dog extends Animals,Animals1
{
  public void run() {System.out.println("Run method");}
  public void run1() {System.out.println("Run1 method");}
}
Run Code Online (Sandbox Code Playgroud)

我知道只使用接口可以实现多重继承,但上面的代码与接口完成的工作相同.

java abstract-class interface multiple-inheritance

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

使用@override和不使用接口有什么区别?

这是我的接口.

public interface ConnectionListener{
    public void onConnectionReady();
    public void onConnectionDown();
}
Run Code Online (Sandbox Code Playgroud)

我在HomeActivity类中实现了这个接口.我想了解在实现的方法中使用@Override与不使用@Override注释之间的区别是什么...

public class HomeActivity implements  ConnectionListener
 {

     @Override
      public void onConnectionReady() {

    }


     @Override
    public void onConnectionDown() {

    }
}
Run Code Online (Sandbox Code Playgroud)

java android overriding wifi-direct

-3
推荐指数
1
解决办法
749
查看次数