Java開発で最もよく使われるインタフェースについて
18575 ワード
インタフェース:
1:インタフェースもデータ型です.2:インタフェースは完全に抽象的です.(抽象クラスは半抽象)あるいはインタフェースは特殊な抽象クラスともいえる.3:インタフェースはどのように定義しますか.文法は何ですか.
4:インタフェースはマルチ継承をサポートし、1つのインタフェースは複数のインタフェースを継承することができる
5:インタフェースには2つの部分しか含まれていない、定数+抽象的な方法.インタフェースには他の内容はない6:インタフェースのすべての要素はpublic修飾されている(開示).7:インタフェースの抽象メソッド定義時:public abstract修飾子は省略できる.8:インタフェースのメソッドはすべて抽象的なメソッドであるため、インタフェースのメソッドはメソッド体を持つことができない.9:インタフェースの定数public static finalは省略できる.次のコードを参照してください.
インタフェースの基本構文:
1:クラスとクラスの間を継承と呼び、クラスとインタフェースの間を実装と呼び、「実装」は「継承」継承がextendsキーワードで実現されると見なすことができるimplementsキーワードで完成する2:1つのクラスがインタフェースを実現する場合、インタフェースの抽象的な方法をすべて実現しなければならない.実装後の抽象的な方法で、修飾子はpublicです
インタフェースとインタフェースの間でマルチ継承がサポートされていますが、1つのクラスで複数のインタフェースを同時に実現できますか?可能ですが、インタフェース内のすべての方法を実装する必要があります.
継承も実装も存在する場合、コードはどのように書くべきですか?extendsキーワードは前、implementsキーワードは後
インタフェースの開発における役割注意:インタフェースの開発における役割は、開発における多態の役割に似ている.多態:抽象プログラミング向け、具体的なプログラミング向けではなく、プログラムの結合度を下げ、プログラムの拡張力を高めるインタフェース:インタフェースプログラミング向け、プログラムの結合度を下げ、プログラムの拡張力を高め、ocp開発の原則に合致する.インタフェースの使用は多態機構から離れられず,(インタフェース+多態こそ結合度を低下させることができる)インタフェースは結合を解くことができ,誰と誰の結合を解くことができるのか.いずれのインタフェースにも呼び出し者と実装者があります.インタフェースは、呼び出し者と実装者をデカップリングすることができる.呼び出し者インタフェース呼び出しインプリメンテーション向けインタフェース記述
抽象クラスとインタフェースの違いは何ですか?抽象クラスは半抽象的である.インタフェースは完全に抽象的です.
抽象クラスに構築メソッドインタフェースがありますが、構築メソッドはありません.
インタフェースとインタフェース間のマルチ継承クラスとクラス間の単一継承のみをサポート
1つのクラスで複数のインタフェースを同時に実現できます.抽象クラスは1つのクラス(単一継承)しか継承できません.
インタフェースでは定数と抽象メソッドのみが許可されます.
注意:後でインタフェースは抽象クラスより多く使用されます.一般的に抽象クラスは使用されず、インタフェースは一般的に「動作」を抽象化します.
1:インタフェースもデータ型です.2:インタフェースは完全に抽象的です.(抽象クラスは半抽象)あるいはインタフェースは特殊な抽象クラスともいえる.3:インタフェースはどのように定義しますか.文法は何ですか.
interface {
}
4:インタフェースはマルチ継承をサポートし、1つのインタフェースは複数のインタフェースを継承することができる
//
interface A1{
}
// ,
interface B1 extends A1{
}
5:インタフェースには2つの部分しか含まれていない、定数+抽象的な方法.インタフェースには他の内容はない6:インタフェースのすべての要素はpublic修飾されている(開示).7:インタフェースの抽象メソッド定義時:public abstract修飾子は省略できる.8:インタフェースのメソッドはすべて抽象的なメソッドであるため、インタフェースのメソッドはメソッド体を持つことができない.9:インタフェースの定数public static finalは省略できる.次のコードを参照してください.
//
interface MyMath1{
// ,public static final
//public static final double PI = 3.1415926;
double PI = 3.1415926;
//
//public abstract int sum(int a,int b);
// , ,public abstract
//
int sum(int a,int b);
//
int sub(int a,int b);
}
インタフェースの基本構文:
1:クラスとクラスの間を継承と呼び、クラスとインタフェースの間を実装と呼び、「実装」は「継承」継承がextendsキーワードで実現されると見なすことができるimplementsキーワードで完成する2:1つのクラスがインタフェースを実現する場合、インタフェースの抽象的な方法をすべて実現しなければならない.実装後の抽象的な方法で、修飾子はpublicです
public class test021 {
public static void main(String[] args) {
// :
MyMath mm = new MyMathImpl();
// ,( ), , 。
int i = mm.sub(1,2);
System.out.println(i);
}
}
//
interface MyMath{
//
double PI = 3.1415926;
int sum(int a,int b);
int sub(int a,int b);
}
// ( )
class MyMathImpl implements MyMath{
//
public int sum(int a,int b){
return a + b;
}
public int sub(int a, int b) {
return a - b;
}
}
インタフェースとインタフェースの間でマルチ継承がサポートされていますが、1つのクラスで複数のインタフェースを同時に実現できますか?可能ですが、インタフェース内のすべての方法を実装する必要があります.
public class test022 {
public static void main(String[] args) {
A a = new D();
a.m1();
// , , ,
// , classCastException 。
// , instanceof
B b2 = new D();
if (b2 instanceof C){
C c = (C)b2;
c.m3();
}
}
}
interface A{
void m1();
}
interface B{
void m2();
}
interface C{
void m3();
}
interface E{
void m3();
}
//
class D implements A,B,C{
@Override
public void m1() {
}
@Override
public void m2() {
System.out.println("m2....");
}
@Override
public void m3() {
System.out.println("m3....");
}
}
継承も実装も存在する場合、コードはどのように書くべきですか?extendsキーワードは前、implementsキーワードは後
public class test023 {
public static void main(String[] args) {
Flyable am = new Cat();// :
am.fly();
//
Flyable pi = new Pig();
// fly() , 。
pi.fly();
}
}
// :
class Animal{
}
// ( )
// 。( )。 , ,
//
interface Flyable{
void fly();
}
// :
//Flyable , , , 。
class Cat extends Animal implements Flyable{
@Override //
public void fly() {
System.out.println(" ! !!");
}
}
// , , Flyable
// , , , 。
class Snake extends Animal{
}
class Pig extends Animal implements Flyable{
@Override
public void fly() {
System.out.println(" !");
}
}
インタフェースの開発における役割注意:インタフェースの開発における役割は、開発における多態の役割に似ている.多態:抽象プログラミング向け、具体的なプログラミング向けではなく、プログラムの結合度を下げ、プログラムの拡張力を高めるインタフェース:インタフェースプログラミング向け、プログラムの結合度を下げ、プログラムの拡張力を高め、ocp開発の原則に合致する.インタフェースの使用は多態機構から離れられず,(インタフェース+多態こそ結合度を低下させることができる)インタフェースは結合を解くことができ,誰と誰の結合を解くことができるのか.いずれのインタフェースにも呼び出し者と実装者があります.インタフェースは、呼び出し者と実装者をデカップリングすることができる.呼び出し者インタフェース呼び出しインプリメンテーション向けインタフェース記述
抽象クラスとインタフェースの違いは何ですか?抽象クラスは半抽象的である.インタフェースは完全に抽象的です.
抽象クラスに構築メソッドインタフェースがありますが、構築メソッドはありません.
インタフェースとインタフェース間のマルチ継承クラスとクラス間の単一継承のみをサポート
1つのクラスで複数のインタフェースを同時に実現できます.抽象クラスは1つのクラス(単一継承)しか継承できません.
インタフェースでは定数と抽象メソッドのみが許可されます.
注意:後でインタフェースは抽象クラスより多く使用されます.一般的に抽象クラスは使用されず、インタフェースは一般的に「動作」を抽象化します.