Javaオブジェクト指向の考え方の本質(6)

1.インターフェース

1.インターフェースの定義

⑴は特別な種類の抽象クラスと見なすことができます;
⑵そして抽象メソッドのみを含みます。

2.インターフェースの構文

(1)定義はinterfaceキーワードで定義されます。
(2)メンバー変数はインターフェイスで定義できませんが、定数は定義できます。
(3)メソッド本体のないメソッドのみを定義できます(デフォルトは抽象メソッドです)。
public abstract void methodName(); publicabstractは
省略できます。

interface Inter12{
    
    
//	int a;    //不能定义成员变量
	static final int A1 = 1;
	public abstract void Aoo();//接口只包含抽象方法,抽象方法没有方法体实现
	void Boo();//接口中抽象方法可忽略不写public abstract
}

3.インターフェースの実装

クラスは、コンマで区切られた複数のインターフェイスを実装できます。
3.1。implementsキーワードを使用してインターフェイスを実装します
。3.2。クラスがインターフェイスを実装した後、インターフェイスで定義されたインターフェイスを実装する必要があります。すべての方法
3.3。インターフェイスをインスタンス化できません。3.4。
インターフェイスをタイプとして使用して変数を宣言できます。インターフェイスタイプの変数は、インターフェイス
を実装するクラスオブジェクトを参照できます(上方モデリング)。
インターフェイス名宣言変数=新しいクラス名();

public class InterfaceDemo2 {
    
    
	public static void main(String[] args) {
    
    
//		Inter12 o1 = new Inter12();接口不能被实例化
		Inter12 o2 = new Coo1();//向上造型 
	}
}

interface Inter12{
    
    
//	int a;    //不能定义成员变量
	static final int A1 = 1;
	public abstract void Aoo();//接口只包含抽象方法,抽象方法没有方法体实现
	void Boo();//接口中抽象方法可忽略不写public abstract
}

class Coo1 implements Inter12{
    
    
	public void Aoo() {
    
    }
	public void Boo() {
    
    }
}

interface Inter13{
    
    
	public void a1();
}

class Doo1 implements Inter12,Inter13{
    
    

	public void a1() {
    
    }
	public void Aoo() {
    
    }
	public void Boo() {
    
    }	
}

4.インターフェイスの継承と実装

(1)インターフェースはインターフェースを継承できます(extendsキーワード)。
子インターフェースは、親インターフェースで定義されているすべてのメソッド(つまり、親インターフェースを実装するメソッド)を継承します。
(2)インターフェースを継承して実装する場合は、最初に継承してから実装する必要があります。
※特定のクラスがインターフェースを実装した後、インターフェースで定義されたすべてのメソッドを実装する必要があります(書き換え)。

interface Inter12{
    
    
//	int a;    //不能定义成员变量
	static final int A1 = 1;
	public abstract void Aoo();//接口只包含抽象方法,抽象方法没有方法体实现
	void Boo();//接口中抽象方法可忽略不写public abstract
}
class Coo1 implements Inter12{
    
    
	public void Aoo() {
    
    }
	public void Boo() {
    
    }
}
interface Inter13{
    
    
	public void a1();
}
class Doo1 implements Inter12,Inter13{
    
    

	public void a1() {
    
    }
	public void Aoo() {
    
    }
	public void Boo() {
    
    }	
}
interface Inter14 extends Inter13{
    
    
	public void Aoo();//继承了接口后,必须实现父类中定义的所有方法(抽想方法)
	public void Boo();
}
abstract class Eoo1{
    
    
	void b() {
    
    }
}
/*
 * 又继承又实现,则先继承父类,再实现接口
 */
class Foo extends Eoo1 implements Inter13{
    
     
	public void b() {
    
    }
	public void a1() {
    
    }
}

2、多形性:

1.意味:

1)同じタイプの参照が異なるオブジェクトを指す場合、異なる実装があります—
動作の多態性:cut()、run()、sleep()...
2)同じオブジェクトが異なるタイプに成形されます時々、さまざまな機能が
あります-オブジェクトの多形:私、あなた、木...

2.上向きのモデリング:

2.1。スーパータイプの参照は派生クラスのオブジェクトを指します
2.2。モデル化できるタイプは次のとおりです:スーパークラス+実装されたインターフェイス
2.3。指摘できることは参照のタイプによって異なります

3.参照タイプの強制が成功するための条件は2つだけです。

3.1。参照が指すオブジェクトはタイプ
3.2です。参照が指すオブジェクトは、インターフェイスを実装するか、クラスを継承します。
たとえば、次の例です。

人 p1 = new 理发师();
人 p2 = new 医生();
人 p3 = new 演员();

p1.cut(); //剪发
p2.cut(); //看病
p3.cut(); //表演

abstract class{
    
    
  abstract void cut();
}
class 理发师 extends{
    
    
  void cut(){
    
     剪发 }
}
class 医生 extends{
    
    
  void cut(){
    
     看病 }
}
class 演员 extends{
    
    
  void cut(){
    
     表演 }
}


強制変換中に上記の2つの条件が満たさない場合、ClassCastExceptionタイプの変換例外が発生します。推奨事項:強制変換の前に、instanceofを使用して、参照が指すオブジェクトがこのタイプであるかどうかを判別します。

public class MultiTypeDemo {
    
    
	public static void main(String[] args) {
    
    
		Aoo o = new Boo(); //向上造型
		Boo o1 = (Boo)o; //o所指向的对象,就是Boo类型
		Inter1 o2 = (Inter1)o; //o所指向的对象,实现了Inter1接口
		o2.a();
		//Coo o3 = (Coo)o; //ClassCastException类型转换异常
		if(o instanceof Coo) {
    
    
			Coo o4 = (Coo)o;
		}else {
    
    
			System.out.println(123456);
		}
	}
}

interface Inter1{
    
    
	public void a();
}
class Aoo{
    
    
}
class Boo extends Aoo implements Inter1{
    
    
	public void a() {
    
    
		System.out.println("实现Inter的方法");
	}
}
class Coo extends Aoo{
    
    
}

フォローアップの内容をお待ちください。すぐに来てください!書くのは簡単ではありません。3Q親指を立てて
くださいエラーがある場合はコメントしてください

すべての章のカタログはここにあります:https//blog.csdn.net/qq_41254299/article/details/106638651

再印刷のソースを示してください:https//blog.csdn.net/qq_41254299

この記事は[Superclover_のブログ]からのものです

おすすめ

転載: blog.csdn.net/qq_41254299/article/details/108265297