我有这个概念性查询。 我们说接口用于实现100%抽象,即隐藏所有实现。
但在Interface中,所有方法都被声明为abstract。 没有实施。
当另一个类实现相同的接口时,就没有更多的抽象,因为实现是在实现它的类中定义的。
请注意它。
答案 0 :(得分:2)
您对抽象接口提供了一个误解。
<强> 1。什么是界面?
接口是仅包含(公共)方法签名的类型ob对象(可以因语言而异)。它没有提供这些方法的实现(函数体)。它可以看作是一种实施类必须满足的契约。
<强> 2。使用接口可以实现什么样的抽象?
(使用&#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按钮并隐藏细节。
定义抽象不需要与抽象方法的接口。 但界面是纯抽象的,隐藏了实现的细节。它通过隐藏实现者的内部实现来暴露契约。
查看相关问题
答案 2 :(得分:0)
这句话在以下意义上是正确的:
当我们使用接口实现作为接口的实例时,实现确实是隐藏的,即实际上可以存在任何实现的对象。
示例:
public <T> Set<T> listToSet(List<T> list) {
HashSet<T> result = new HashSet<>();
for (T t: list) {
result.add(t);
}
return result;
}
这里的含义是:
调用者可以传递任何List<T>
实现,并且实现对方法的内在函数是隐藏的,它只知道传递的是List<T>
,因此它可以被迭代。
该方法返回Set<T>
,具体实现对调用者隐藏,可以有任何Set<T>
实现(示例中为HashSet<T>
)。
因此,对于变量或返回类型的声明类型是接口的情况,关于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();
}
}