JAva 8:インタフェースの新しい特性(定数と抽象メソッドを除く)、デフォルトメソッドと静的メソッド
4963 ワード
一、原則
二、解読規則の細分化
三、例
四、インタフェースインターフェース
一、原則
複数のデフォルトメソッドの場合Java 8を使用してアプリケーションを開発するには、サブクラスが複数のインタフェースを実装する場合、インタフェースのデフォルトメソッド定義に複数のデフォルトメソッドが表示され、インタフェースのデフォルトメソッドに同名の場合があります.この場合、サブクラスは実装または呼び出し時に通常3つの原則に従います.
二、解読規則の細分化
, CompareA CompaareB
三、例
例1:
public interface CompareA {
static void method1() {
System.out.println("CompareA ");
}
default void method2() {
System.out.println("CompareA method2");
}
default void method3() {
System.out.println("CompareA method3");
}
void walk();
}
interface CompareB {
static void method1() {
System.out.println("CompareB ");
}
default void method2() {
System.out.println("CompareB method2");
}
default void method3() {
System.out.println("CompareB method3");
}
void walk();
}
class SubCompareA extends SuperCompare implements CompareA {
// CompareA CompaareB
@Override
public void walk() {
}
public void show() {
CompareA.super.method2();
CompareA.super.method3();
}
@Override
public void method2() {
System.out.println("SubCompareA method2");
}
}
class SuperCompare {
public void method3() {
System.out.println("SuperCompare method3");
}
}
class CompareATest {
public static void main(String[] args) {
// ,
CompareA.method1();
CompareB.method1();
System.out.println();
SubCompareA subCompareA = new SubCompareA();
subCompareA.method2();
subCompareA.method3();
subCompareA.show();
}
}
:
CompareA
CompareB
SubCompareA method2
SuperCompare method3
CompareA method2
CompareA method3
例2:第1の判断ができない場合、サブインタフェースの優先度が高くなる
/**
* info
*/
public interface Phone {
default void info(){
System.out.println(" ");
}
}
/**
* MiPhone Phone info
*/
public interface MiPhone extends Phone{
default void info(){
System.out.println(" ");
}
}
/**
* Phone MiPhone
*/
public class M2sPhone implements Phone,MiPhone {
public static void main(String[] args) {
new M2sPhone().info();
}
}
:
例3:クラス優先原則(メソッドのみ、属性であればどの属性かを明確に示す必要がある)
interface A { int x = 0}
class B { int x = 1}
class C extends B implement A {
public void px() {
System.out.println(x);//
System.out.println(super.x);// x
System.out.println(A.x); // x
}
}
例4:同じ名前の複数のインタフェースが抽象メソッドである場合、実装クラスでプレイメソッドを実装するのはPlayableとBounceableに相当する抽象メソッドが実装される
interface Playable {
void play();
}
interface Bounceable {
void play();
}
interface Rollable extends Playable,Bounceable {
Ball ball = new Ball("PingPang");
}
class Ball implement Rollable {
private String name;
public String getName() {
return name;
}
public Ball(String name) {
this.name = name;
}
public void play() {
System.out.println(ball.getName());
}
}
四、インタフェースインターフェース
JAvaではクラス単一継承が行われ、インタフェースは多重継承インタフェースでコンストラクタを定義できません.インタフェースをインスタンス化できません
実装クラスがインタフェース内のすべてのメソッドを上書きすると、実装クラスはインスタンス化できます.実装クラスがインタフェース内の抽象メソッドを上書きしていない場合、実装クラスは抽象クラスです.
抽象クラスはインタフェースの抽象メソッドを実装しないか,実装部分を実装することができるが,抽象クラスを継承する一般クラスは抽象に残っている実装インタフェースのない抽象メソッドを実装する必要がある.
C+Bの合計の書き換え方法は、=Aのすべての方法でなければなりません.
C,Bに拡張の方法があれば>Aのすべての方法である.
interface Flyable {
void run();
void fly();
}
abstract class Bus implements Flyable {
}
abstract class Bus1 extends Bus {
@Override
public void run() {
}
}
class Bus2 extends Bus1 {
@Override
public void fly() {
}
}
class Car implements Flyable {
@Override
public void run() {
}
@Override
public void fly() {
}
}