相关疑难解决方法(0)

接口与基类

我何时应该使用接口,何时应该使用基类?

如果我不想实际定义方法的基本实现,它应该始终是一个接口吗?

如果我有狗和猫类.为什么我要实现IPet而不是PetBase?我可以理解有ISheds或IBarks(IMakesNoise?)的接口,因为那些可以基于宠物放在宠物上,但我不明白哪个用于通用Pet.

language-agnostic oop static-typing interface base-class

754
推荐指数
17
解决办法
15万
查看次数

何时使用接口而不是抽象类,反之亦然?

这可能是一个通用的OOP问题.我想根据它们的用法在接口和抽象类之间进行一般性比较.

什么时候想要使用接口?何时想要使用抽象类

oop inheritance abstract-class interface

412
推荐指数
13
解决办法
31万
查看次数

为什么要首选Java类的接口?

PMD将报告违规行为:

ArrayList<Object> list = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)

违规是"避免使用像'ArrayList'这样的实现类型;而是使用接口".

以下行将更正违规行为:

List<Object> list = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)

为什么要使用后者List而不是ArrayList

java collections interface

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

我什么时候应该在java中使用接口?

准确地在Java中使用接口的一个很好的例子将是理想的,并且适用于任何特定的规则.

java interface

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

为什么我们在实例化它们之前首先将子类型声明为它们的超类型?

阅读其他人的代码,我见过很多:

List<E> ints = new ArrayList<E>();
Map<K, V> map = new HashMap<K, V>();
Run Code Online (Sandbox Code Playgroud)

我的问题是:以这种方式实例化它们的意义/优势是什么,而不是:

ArrayList<E> ints = new ArrayList<E>();
HashMap<K, V> map = new HashMap<K, V>();
Run Code Online (Sandbox Code Playgroud)

令人感到奇怪的是,我从未见过如下:

CharSequence s = new String("String");
Run Code Online (Sandbox Code Playgroud)

要么

OutputStream out = new PrintStream(OutputStream);
Run Code Online (Sandbox Code Playgroud)


重复(问题的第一部分):

何时/为何使用/定义接口

在java中使用接口或类型进行变量定义?

我什么时候应该在java中使用接口?

为什么要为每个类创建接口而不是它们的实现

这两个java变量声明有什么区别?

java oop

21
推荐指数
4
解决办法
2142
查看次数