javaインターフェースの中にメンバー変数がありますか?
10862 ワード
答えは:いいですが、public static finalでなければならないし、public static finalでなければなりません。
JDK 1.7がサポートインターフェースにdefault方法とstatic方法が存在するようになった以上、これらの方法は実装上、メンバー変数がデータサポートを提供する必要があります。まず例を見ます。インターフェースのメンバー変数はデフォルトで、public static finalしかないので、これらのアクセス修飾子を加えると余計です。 インターフェースのメンバー変数は、インプリメンテーションクラスで直接アクセスできます。(静的方法であれ、非静的方法であれ)、親インターフェースに重複して現れるメンバー変数があれば、インターフェース名を付けて区別するしかありません。 インターフェースにおけるdefault修飾の方法は、サブクラスにデフォルトの実装を提供する。 サブクラスは、複数のインターフェースを実現し、複数のインターフェースで同様に署名する方法がある場合、順序付け規則に従って、前のインターフェースに書くことを基準とする。親インターフェースのdefaultメソッドが重複している場合、サブクラスはこの方法を書き直さなければならない(そうでなければ、複数のインターフェースのそれぞれが実現を提供しているので、サブクラスはどれを呼び出すか分かりません)。
JDK 1.7がサポートインターフェースにdefault方法とstatic方法が存在するようになった以上、これらの方法は実装上、メンバー変数がデータサポートを提供する必要があります。まず例を見ます。
// JDK1.8
//IA.java
public interface IA {
int a = 100;
double NUM = 1;// public static final double NUM = 1;
String name = "IA";
void say();
default void print() {
System.out.println("IA:print()");
}
default void pritA() {
System.out.println("IA: " + name);
}
}
//IB.java
public interface IB {
int b = 200;
double NUM = 2;
String name = "IB";
void say();
default void print() {
System.out.println("IB:print()");
}
default void pritB() {
System.out.println("IB: " + name);
}
}
//AB.java
public class AB implements IA, IB {
public static void main(String[] args) {
AB ab = new AB();
//ab.name , IA name IB
System.out.println(a);//100 a b ,
System.out.println(b);//200
System.out.println(IA.NUM);//1.0
System.out.println(IB.NUM);//2.0
System.out.println(IA.name);//IA
System.out.println(IB.name);//IB
ab.say();//AB:say()
ab.print();//AB:print()
ab.pritA();//IA: IA
ab.pritB();//IB: IB
}
// , , IA say()
@Override
public void say() {
System.out.println("AB:say()");
}
// IA IB ( ) default , print IA , IB 。
@Override
public void print() {
System.out.println("AB:print()");
}
}
これに基づいて結論を出す: