java接口方法不实现可以用_关于Java:为什么接口不能实现另一个接口?

我的意思是:

interface B {...}

interface A extends B {...} // allowed

interface A implements B {...} // not allowed

我在谷歌上找到了这个:

implements denotes defining an implementation for the methods of an interface. However interfaces have no implementation so that's not possible.

然而,接口是100%抽象类,抽象类可以实现接口(100%抽象类),而不实现其方法。当它定义为"接口"时,有什么问题?

详细地说,

interface A {

void methodA();

}

abstract class B implements A {} // we may not implement methodA() but allowed

class C extends B {

void methodA(){}

}

interface B implements A {} // not allowed.

//however, interface B = %100 abstract class B

implements是指实施,当interface只是为了提供interface而不是为了实施。

100%abstract class在功能上等同于interface,但如果您愿意,它也可以实现(在这种情况下,它不会保持100%abstract),因此从JVM的角度来看,它们是不同的。

此外,100%抽象类中的成员变量可以具有任何访问限定符,在接口中,它们隐式地是public static final。

至于Java 8,接口可以有默认方法,使它们更类似于抽象类。

谢谢你最后一句话!

implements表示将为abstract方法定义一个行为(显然除了抽象类),您定义了实现。

extends表示行为是遗传的。

对于接口,可以说一个接口应该具有与另一个相同的行为,甚至没有实际的实现。这就是为什么它对一个与extends的接口,而不是实现另一个接口更有意义的原因。

另一方面,请记住,即使一个abstract类可以定义abstract方法(接口的正常方式),它仍然是一个类,仍然必须继承(扩展)并且不被实现。

概念上有两个"域"类和接口。在这些域中,您总是在扩展,只有一个类实现一个接口,这有点"跨越边界"。所以基本上,接口的"扩展"反映了类的行为。至少我认为这是背后的逻辑。似乎并不是每个人都同意这种逻辑(我发现这有点做作自己),事实上,没有任何技术上的理由有两个不同的关键字。

如果"y扩展x"而不是密封的,那么可以有另一个扩展"y"的类型"z"。无论x是接口还是类,这都是正确的。但是,如果"W实现X",则不可能有"V实现W"。"extends"可以是"chained"和"implements",这似乎不是拥有不同关键字的好理由。

However, interface is 100% abstract class and abstract class can

implements interface(100% abstract class) without implement its

methods. What is the problem when it is defining as"interface" ?

这只是惯例问题。Java语言的作者们认为,"扩展"是描述这种关系的最好方式,所以这就是我们所使用的。

一般来说,即使接口是"100%抽象类",我们也不会这样想。我们通常认为接口是实现某些关键方法的承诺,而不是从中派生的类。因此,我们倾向于对接口使用不同的语言,而不是对类使用不同的语言。

正如其他人所说,选择"扩展"而不是"工具"是有充分理由的。

是的,先生。这是惯例问题。许多人试图在逻辑上合理地解释Sun的原始Java语言约束,而这只是个人的观点。如果编译器已经添加了"实现"接口,我想同样的人也会证明这一点。-)

希望这将有助于你有点我学到的OOP(核心Java)在我的大学。

implements表示定义接口方法的实现。然而,接口没有实现,所以这是不可能的。但是,一个接口可以扩展另一个接口,这意味着它可以添加更多的方法并继承其类型。

下面是一个例子,这是我的理解,也是我在OOPS中学到的。

interface ParentInterface{

void myMethod();

}

interface SubInterface extends ParentInterface{

void anotherMethod();

}

记住一件事:一个接口只能扩展另一个接口,如果你想在某个类上定义它的函数,那么在下面实现的示例中,只有一个接口

public interface Dog

{

public boolean Barks();

public boolean isGoldenRetriever();

}

现在,如果一个类要实现这个接口,它将是这样的:

public class SomeClass implements Dog

{

public boolean Barks{

// method definition here

}

public boolean isGoldenRetriever{

// method definition here

}

}

如果一个抽象类有一些抽象函数define和declare,而你想要定义那些函数,或者你可以说实现那些函数,那么你应该扩展这个类,因为抽象类只能被扩展。下面是示例。

public abstract class MyAbstractClass {

public abstract void abstractMethod();

}

下面是MyAbstractClass的一个子类示例:

public class MySubClass extends MyAbstractClass {

public void abstractMethod() {

System.out.println("My method implementation");

}

}

Interface是包含无法创建任何对象的抽象方法的类。由于Interface无法创建对象,而且它不是纯类,因此不值得实现它。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值