Content deleted Content added
m Dating maintenance tags: {{When}} |
|||
(43 intermediate revisions by 38 users not shown) | |||
Line 1:
{{Short description|Concept in the Java computer programming language}}
An '''interface''' in the [[Java (programming language)|Java programming language]] is an [[abstract type]] that is used to
Interfaces cannot be [[Instance (computer science)|instantiated]], but rather are implemented. A class that implements an interface must implement all of the non-default methods described in the interface, or be an [[abstract class]]. Object references in Java may be specified to be of an interface type; in each case, they must either be [[null pointer|null]], or be bound to an object that implements the interface.
One benefit of using interfaces is that they simulate [[multiple inheritance]]. All classes in Java must have exactly one [[base class]], the only exception being {{Javadoc:SE|package=java.lang|java/lang|Object}} (the [[top type|root class]] of the Java [[type system]]); [[multiple inheritance]] of classes is not allowed. However, an interface may inherit multiple interfaces and a class may implement multiple interfaces.
== Overview ==
Interfaces are used to encode similarities which the classes of various types share, but do not necessarily constitute a class relationship. For instance, a [[human]] and a [[parrot]] can both [[whistle]]; however, it would not make sense to represent <code>Human</code>s and <code>Parrot</code>s as subclasses of a <code>Whistler</code> class. Rather they
▲Interfaces are used to encode similarities which the classes of various types share, but do not necessarily constitute a class relationship. For instance, a [[human]] and a [[parrot]] can both [[whistle]]; however, it would not make sense to represent <code>Human</code>s and <code>Parrot</code>s as subclasses of a <code>Whistler</code> class. Rather they would most likely be subclasses of an <code>Animal</code> class (likely with intermediate classes), but both would implement the <code>Whistler</code> interface.
Another use of interfaces is being able to use an [[Object (computer science)|object]] without knowing its type of class, but rather only that it implements a certain interface. For instance, if one were annoyed by a whistling noise, one may not know whether it is a human or a parrot, because all that could be determined is that a whistler is whistling. The call <code>whistler.whistle()</code> will call the implemented method <code>whistle</code> of object <code>whistler</code> no matter what class it has, provided it implements <code>Whistler</code>. In a more practical example, a [[sorting algorithm]] may expect an object of type {{Javadoc:SE|java/lang|Comparable}}. Thus, without knowing the specific type, it knows that objects of that type can somehow be sorted.
For example:
}
</syntaxhighlight>
▲<source lang="Java">
▲ interface Bounceable {
▲ double pi=3.1415;
▲ void setBounce(); // Note the semicolon
▲ // Interface methods are public, abstract and never final.
▲ // Think of them as prototypes only; no implementations are allowed.
An interface:
==Usage==
Line 37 ⟶ 36:
''constant declarations''
''abstract method declarations''
'' static method declarations''
}
Line 44:
Thus, a simple interface may be
<
public interface Predator {
}
</syntaxhighlight>
The member type declarations in an interface are implicitly static, final and public, but otherwise they can be any type of class or interface.<ref>{{cite web|url=http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.5|title=The Java Language Specification}}</ref>
===Implementing interfaces in a class===
Line 58:
... implements ''InterfaceName''[, ''another interface'', ''another'', ...] ...
[[Class (software)|Classes]] may implement an interface. For example
<
public class Lion implements Predator {
}
</syntaxhighlight>
If a class implements an interface and does not implement all its methods, it must be marked as <code>abstract</code>. If a class is abstract, one of its [[Subclass (computer science)|subclasses]] is expected to implement its unimplemented methods
Classes can implement multiple interfaces:
<
</syntaxhighlight>
Interfaces can share common class methods:
<
class Animal implements LikesFood, LikesWater {
</syntaxhighlight>
However a given class cannot implement the same or a similar interface multiple times:
<
class Animal implements Shares<Boolean>, Shares<Integer> ...
//
</syntaxhighlight>
Interfaces are commonly used in the Java language for [[Callback (computer science)|callbacks]],<ref>{{cite web |last1=Mitchell |first1=John D. |date=1996-06-01 |df=mdy |url=
===Subinterfaces===
Interfaces can extend several other interfaces, using the same formula as described below. For example,
<
</syntaxhighlight>
is legal and defines a subinterface.
==Examples==
Line 110:
==See also==
* [[Interface (object-oriented programming)]]
* [[Mixin]]
* [[Trait (computer programming)]]
==
{{reflist}}
==References==
*{{cite book | title= "Effective Java: Programming Language Guide" |last=Bloch| first=Joshua| publisher=Addison-Wesley | edition=third | isbn=978-0134685991| year=2018}}
==External links==
|