JAVAインタフェースに関する知識は、この記事で十分です
28489 ワード
「JAVAを学んで、この編を見れば十分」シリーズを通じて、読者にJAVAに関する知識を深く理解してもらいたい.シロから大牛まで、一歩一歩歩いて、少しずつ勉強しなければなりません!
文書ディレクトリは「JAVAを学んで、この編を見れば十分だ」シリーズを通じて、読者たちにJAVAに関する知識を深く理解させることを望んでいる.シロから大牛まで、一歩一歩歩いて、少しずつ勉強しなければなりません! 1.インタフェースの定義 インタフェースの定義方法:インタフェースのメンバー を定義します.注意事項 2.インタフェースの使用 3.JDK1.8ポスト新機能 1.インタフェースの定義
1.インタフェースはinterfaceを使用して定義.Javaでは,インタフェースとクラスが並列した2つの構造である.
インタフェースの定義方法:インタフェースのメンバーの定義
3.1 JDK 7以前:グローバル定数と抽象方法>グローバル定数:public static finalのみを定義する.しかし、書くときは、書かない>抽象的な方法:public abstractの
3.2 JDK 8:グローバル定数および抽象メソッドの定義に加えて、静的メソッド、デフォルトメソッドも定義できます(以下参照)
注意事項
4.インタフェースでコンストラクタを定義できません!インタフェースがインスタンス化できないことを意味する.Java開発では、インタフェースは、インタフェース内のすべての抽象メソッドを実装クラスに実装(implements)させることによって使用する.実装クラスがインタフェース内のすべての抽象メソッドを上書きしていない場合、この実装クラスは抽象クラス6である.Javaクラスは複数のインタフェースを実現することができる-->Java単一継承性の限界を補うフォーマット:class AA extends BB implements CC,DD,EE 7.インタフェースとインタフェースとの間で継承することができ、さらに多く継承することができる.インタフェースの具体的な使用は、多態性を体現する.インタフェースは、実際には規範と見なすことができます
面接問題:抽象類とインタフェースにはどのような異同がありますか.
2.インタフェースの使用 1.インタフェースの使用も多態性 を満たす. 2.インタフェースは、実際には仕様 を定義する. 3.開発中、インタフェース向けプログラミングを体得!
3.JDK1.8以降の新しい機能
1.親を継承してインタフェースが実装されている場合、インタフェースにデフォルトのメソッドがあり、同じ名前のメソッドが存在する場合、子クラスはこのメソッドを書き換えていない場合、デフォルトで親の同じ名前のパラメータのメソッドを呼び出します.->類優先原則【知識点3】2.インプリメンテーション・クラスが複数のインタフェースを実装し、複数のインタフェースで同じ名前のパラメータのデフォルト・メソッドが定義されている場合、インプリメンテーション・クラスがこのメソッドを書き換えていない場合、エラーが表示されます.->インタフェースの競合.これは、実装クラスでこの方法「知識点4」を書き換える必要がある.サブクラス(または実装クラス)のメソッドで親クラス、インタフェースで書き換えられたメソッドを呼び出す方法【知識点5】
5つの知識点があり、以下のコードに説明があります.
文書ディレクトリ
1.インタフェースはinterfaceを使用して定義.Javaでは,インタフェースとクラスが並列した2つの構造である.
インタフェースの定義方法:インタフェースのメンバーの定義
3.1 JDK 7以前:グローバル定数と抽象方法>グローバル定数:public static finalのみを定義する.しかし、書くときは、書かない>抽象的な方法:public abstractの
3.2 JDK 8:グローバル定数および抽象メソッドの定義に加えて、静的メソッド、デフォルトメソッドも定義できます(以下参照)
注意事項
4.インタフェースでコンストラクタを定義できません!インタフェースがインスタンス化できないことを意味する.Java開発では、インタフェースは、インタフェース内のすべての抽象メソッドを実装クラスに実装(implements)させることによって使用する.実装クラスがインタフェース内のすべての抽象メソッドを上書きしていない場合、この実装クラスは抽象クラス6である.Javaクラスは複数のインタフェースを実現することができる-->Java単一継承性の限界を補うフォーマット:class AA extends BB implements CC,DD,EE 7.インタフェースとインタフェースとの間で継承することができ、さらに多く継承することができる.インタフェースの具体的な使用は、多態性を体現する.インタフェースは、実際には規範と見なすことができます
面接問題:抽象類とインタフェースにはどのような異同がありますか.
package java1;
public class InterfaceTest {
public static void main(String[] args) {
System.out.println(Flyable.MAX_SPEED);
System.out.println(Flyable.MIN_SPEED);
// Flyable.MIN_SPEED = 2;
Plane plane = new Plane();
plane.fly();
}
}
interface Flyable{
//
public static final int MAX_SPEED = 7900;//
int MIN_SPEED = 1;// public static final
//
public abstract void fly();
// public abstract
void stop();
//Interfaces cannot have constructors
// public Flyable(){
//
// }
}
interface Attackable{
void attack();
}
class Plane implements Flyable{
@Override
public void fly() {
System.out.println(" ");
}
@Override
public void stop() {
System.out.println(" ");
}
}
abstract class Kite implements Flyable{
@Override
public void fly() {
}
}
class Bullet extends Object implements Flyable,Attackable,CC{
@Override
public void attack() {
// TODO Auto-generated method stub
}
@Override
public void fly() {
// TODO Auto-generated method stub
}
@Override
public void stop() {
// TODO Auto-generated method stub
}
@Override
public void method1() {
// TODO Auto-generated method stub
}
@Override
public void method2() {
// TODO Auto-generated method stub
}
}
//************************************
interface AA{
void method1();
}
interface BB{
void method2();
}
interface CC extends AA,BB{
}
2.インタフェースの使用
//1.
Flash flash = new Flash();
com.transferData(flash);
//2.
com.transferData(new Printer());
//3.
USB phone = new USB(){
@Override
public void start() {
System.out.println(" ");
}
@Override
public void stop() {
System.out.println(" ");
}
};
com.transferData(phone);
//4.
com.transferData(new USB(){
@Override
public void start() {
System.out.println("mp3 ");
}
@Override
public void stop() {
System.out.println("mp3 ");
}
});
package java1;
public class USBTest {
public static void main(String[] args) {
Computer com = new Computer();
//1.
Flash flash = new Flash();
com.transferData(flash);
//2.
com.transferData(new Printer());
//3.
USB phone = new USB(){
@Override
public void start() {
System.out.println(" ");
}
@Override
public void stop() {
System.out.println(" ");
}
};
com.transferData(phone);
//4.
com.transferData(new USB(){
@Override
public void start() {
System.out.println("mp3 ");
}
@Override
public void stop() {
System.out.println("mp3 ");
}
});
}
}
class Computer{
public void transferData(USB usb){//USB usb = new Flash();
usb.start();
System.out.println(" ");
usb.stop();
}
}
interface USB{
// : 、 、
void start();
void stop();
}
class Flash implements USB{
@Override
public void start() {
System.out.println("U ");
}
@Override
public void stop() {
System.out.println("U ");
}
}
class Printer implements USB{
@Override
public void start() {
System.out.println(" ");
}
@Override
public void stop() {
System.out.println(" ");
}
}
3.JDK1.8以降の新しい機能
1.親を継承してインタフェースが実装されている場合、インタフェースにデフォルトのメソッドがあり、同じ名前のメソッドが存在する場合、子クラスはこのメソッドを書き換えていない場合、デフォルトで親の同じ名前のパラメータのメソッドを呼び出します.->類優先原則【知識点3】2.インプリメンテーション・クラスが複数のインタフェースを実装し、複数のインタフェースで同じ名前のパラメータのデフォルト・メソッドが定義されている場合、インプリメンテーション・クラスがこのメソッドを書き換えていない場合、エラーが表示されます.->インタフェースの競合.これは、実装クラスでこの方法「知識点4」を書き換える必要がある.サブクラス(または実装クラス)のメソッドで親クラス、インタフェースで書き換えられたメソッドを呼び出す方法【知識点5】
public void myMethod(){
method3();//
super.method3();//
//
CompareA.super.method3();
CompareB.super.method3();
}
5つの知識点があり、以下のコードに説明があります.
package java8;
public class SubClassTest {
public static void main(String[] args) {
SubClass s = new SubClass();
// s.method1();
// SubClass.method1();
// 1: , 。
CompareA.method1();
// 2: , 。
// , ,
s.method2();
// 3: ( ) ,
// , 。-->
// 4: , ,
// , 。--> 。
//
s.method3();
}
}
class SubClass extends SuperClass implements CompareA,CompareB{
public void method2(){
System.out.println("SubClass: ");
}
public void method3(){
System.out.println("SubClass: ");
}
// 5: ( ) 、
public void myMethod(){
method3();//
super.method3();//
//
CompareA.super.method3();
CompareB.super.method3();
}
}