接口如何在Java中实现100%抽象?

时间:2016-01-22 19:38:08

标签: java oop

我有这个概念性查询。 我们说接口用于实现100%抽象,即隐藏所有实现。

但在Interface中,所有方法都被声明为abstract。 没有实施。

当另一个类实现相同的接口时,就没有更多的抽象,因为实现是在实现它的类中定义的。

请注意它。

6 个答案:

答案 0 :(得分:2)

您对抽象接口提供了一个误解。

<强> 1。什么是界面?
接口是仅包含(公共)方法签名的类型ob对象(可以因语言而异)。它没有提供这些方法的实现(函数体)。它可以看作是一种实施类必须满足的契约。

<强> 2。使用接口可以实现什么样的抽象?

Created with 'Violet UML Editor'(使用&#39; Violet UML编辑器创建&#39;)

在此结构中,类User仅知道对象数组中的对象具有签名void Display()的方法。实际实现此方法的方法是User未知。

抽象的发生用红线表示。这是接口实现的唯一(非常强大的)抽象。

void Display()隐藏了User的各种变体的实施细节。它可以调用IDisplayable.Display()并通过多态来调用正确的方法。

答案 1 :(得分:1)

我想解释一下非编程语言的区别。

假设您有电视和遥控器。通过遥控器,您可以使用电视。

遥控器有开和关按钮。单击“开”按钮时,电视将打开。但是你不知道On按钮实现的内部。关闭按钮的情况也是如此,它会关闭电视。

现在<MyScreenManager>: IntroScreen: <IntroScreen>: name: 'introscreen' canvas: Color: rgb: 0, 0.267, 0 Rectangle: size: self.size GridLayout: rows: 1 size_hint: None, None width: self.minimum_width # combined width of child widgets height: self.minimum_height # combined height of child widgets pos_hint: {'center_x': 0.5, 'center_y': 0.5} spacing: 10 TextInput: id: login text: "Login" multiline: False size_hint: None, None height:60 width: 140 font_size: 30 Button: text: "Enter" size_hint: None, None size: 100, 63 on_release: root.current = 'mainpage' 是一个接口,Remote是一个实现对象。在java编程语言中映射相同的概念,您将获得更多的清晰度。

远程是On和Off方法的接口。电视实现远程接口。

抽象隐藏细节,电视已经实现了它。即使没有Remote接口,电视也可以有On和Off按钮并隐藏细节。

定义抽象不需要与抽象方法的接口。 但界面是纯抽象的,隐藏了实现的细节。它通过隐藏实现者的内部实现来暴露契约。

查看相关问题

Abstraction VS Information Hiding VS Encapsulation

答案 2 :(得分:0)

这句话在以下意义上是正确的:

当我们使用接口实现作为接口的实例时,实现确实是隐藏的,即实际上可以存在任何实现的对象。

示例:

public <T> Set<T> listToSet(List<T> list) {
    HashSet<T> result = new HashSet<>();
    for (T t: list) {
        result.add(t);
    }
    return result;
}

这里的含义是:

  1. 调用者可以传递任何List<T>实现,并且实现对方法的内在函数是隐藏的,它只知道传递的是List<T>,因此它可以被迭代。

  2. 该方法返回Set<T>,具体实现对调用者隐藏,可以有任何Set<T>实现(示例中为HashSet<T>)。

  3. 因此,对于变量或返回类型的声明类型是接口的情况,关于100%抽象的陈述是正确的。

答案 3 :(得分:0)

在Java接口中不能包含实现以确保抽象(但这不是一般的OOP要求),因此当您通过接口类型操作对象时,您不能依赖任何实现。

在现代Java中,您可以为方法提供一些默认实现,这与抽象并不矛盾,因为您不能使用属性,因此提供的代码只是“功能”,因为它只描述泛型< / em>行为。

另一方面,你有一些具体的类,它们提供了一些接口的完整实现。

在两者之间你有抽象类,提供部分实现。

一个好的做法是隐藏实现:

  • 为概念的用户提供界面
  • 提供工厂来隐藏具体课程的现实

当然这是一个理想的选择。

答案 4 :(得分:0)

我认为如果对实施一无所知,我们就有了要求 然后我们应该去接口和 内部接口每个方法都是public和abstract是否声明 因此接口也被认为是100%纯抽象类

答案 5 :(得分:0)

我认为下面的程序将帮助您了解接口和抽象:

  interface Person{
   void dsplay();
}
class Student implements Person{
   public void dsplay() {
      System.out.println("This is display method of the Student class");
   }
}
class Lecturer implements Person{
   public void dsplay() {
      System.out.println("This is display method of the Lecturer class");
   }
}
public class AbstractionExample{
   public static void main(String args[]) {
      Person person1 = new Student();
      person1.dsplay();
      Person person2 = new Lecturer();
      person2.dsplay();
   }
}