インターフェイスとポリモーフィズムの面接の質問と演習

基本的な質問

質問 1: 概念分析

  1. インターフェースとは何ですか?またその定義方法は何ですか?
    • インターフェイスは Java 言語の参照型であり、メソッドのコレクションです。
    • インターフェイス キーを使用してインターフェイスを定義します。インターフェイスでは、抽象メソッド、デフォルト メソッド、プライベート メソッド、静的メソッド、その他のメソッドを定義できます。
  2. ポリモーフィズムとは何ですか?またその条件は何ですか?
    • ある種の物の動作には複数の症状があります。
    • 状態:
      • 継承または実装 [いずれかを選択]
      • メソッドのオーバーライド。
      • 親クラスの参照は、子クラスのオブジェクトを指します。
  3. ポリモーフィック機能を使用する利点は何ですか?
    • メソッドのスケーラビリティと再利用性を強化します。
  4. ポリモーフィック機能を使用するデメリットは何ですか?
    • 型のプロモーションのため、サブクラス オブジェクトに固有のメソッドの呼び出しはダウンキャストする必要があります。

質問 2: 文法練習

  • 構文ポイント: インターフェース

  • コードを段階的に記述すると、図に示すような結果が得られます。
    ここに画像の説明を挿入します

  • 書き込み手順:

    1. インターフェース A を定義し、通常のクラス B がインターフェース A を実装する
    2. A インターフェイスで、抽象メソッド showA を定義します。
    3. インターフェイス A で、デフォルトのメソッド showB を定義します。
    4. クラス B で、showA メソッドをオーバーライドします。
    5. テスト クラスで、クラス B オブジェクトを作成し、showA メソッドと showB メソッドを呼び出します。
  • 参考回答:

	
	public class Test2 {
    
    
	    public static void main(String[] args) {
    
    
	        B b = new B();
	        b.showA();
	        b.showB();
	    }
	}
	
	interface A{
    
    
	    public abstract void showA();
	    public default void showB(){
    
    
	        System.out.println("BBBB");
	    }
	}
	
	class B implements A {
    
    
	    @Override
	    public void showA() {
    
    
	        System.out.println("AAAA");
	    }
	}

質問 3: 文法練習

  • 構文ポイント: インターフェース

  • コードを段階的に記述すると、図に示すような結果が得られます。

ここに画像の説明を挿入します

  • 書き込み手順:

    1. インターフェース A を定義し、通常のクラス B がインターフェース A を実装します。
    2. A インターフェイスで、抽象メソッド showA を定義します。
    3. インターフェイス A で、ループ内で str を 10 回出力するプライベート メソッド show10 (String str) を定義します。
    4. インターフェイス A で、デフォルトのメソッド showB10 および showC10 を定義し、それぞれ show10 メソッドを呼び出してパラメータを渡します。
    5. テスト クラスで、B オブジェクトを作成し、showA メソッド、showB10 メソッド、および showC10 メソッドを呼び出します。
  • 参考回答:

	
	public class Test3 {
    
    
	    public static void main(String[] args) {
    
    
	        BB b = new BB();
	        b.showA();
	        b.show10B();
	        b.show10C();
	    }
	}
	
	interface AA{
    
    
	    public abstract void showA();
	    public default void show10B(){
    
    
	       show10("BBBB");
	    }
	
	    public default void show10C(){
    
    
	        show10("CCCC");
	    }
	
	    private  void show10(String str){
    
    
	        for (int i = 0; i < 10; i++) {
    
    
	            System.out.print(str+" ");
	        }
	        System.out.println();
	    }
	}
	
	class BB implements AA {
    
    
	    @Override
	    public void showA() {
    
    
	        System.out.println("AAAA");
	    }
	
	}

質問 4: 文法練習

  • 構文ポイント: インターフェース、静的

  • コードを段階的に記述すると、図に示すような結果が得られます。

ここに画像の説明を挿入します

  • 書き込み手順
  1. インターフェース A を定義し、通常のクラス B がインターフェース A を実装します。
  2. A インターフェイスで、抽象メソッド showA を定義します。
  3. インターフェイス A で、ループ内で str を 10 回出力するプライベート静的メソッド show10 (String str) を定義します。
  4. インターフェイス A で、静的メソッド showB10 および showC10 を定義し、それぞれ show10 メソッドを呼び出してパラメータを渡します。
  5. クラス B で、静的メソッド showD を定義します。
  6. テスト クラスでは、A インターフェイスを使用して静的な showB10 メソッドと showC10 メソッドを呼び出します。
  7. テスト クラスでは、クラス B を使用して showA メソッドと showD メソッドを呼び出します。
  • 参考回答:
	
	public class Test4 {
    
    
	    public static void main(String[] args) {
    
    
	       AAA.showB();
	       AAA.showC();
	        BBB bbb = new BBB();
	        bbb.showA();
	        BBB.showD();
	    }
	}
	
	interface AAA {
    
    
	    public abstract void showA();
	    public static void showB(){
    
    
	        System.out.println("static BBBB");
	
	        show10("BBBB");
	    }
	
	    public static void showC(){
    
    
	        System.out.println("static CCCC");
	
	        show10("CCCC");
	    }
	
	    private static void show10(String str) {
    
    
	        for (int i = 0; i < 10; i++) {
    
    
	            System.out.print( str+" ");
	        }
	        System.out.println();
	    }
	}
	
	class BBB implements AAA {
    
    
	    @Override
	    public void showA() {
    
    
	        System.out.println("AAA");
	    }
	
	    public static void showD(){
    
    
	        System.out.println("DDDD");
	    }
	}

質問 5: 文法練習

  • 文法ポイント: インターフェース、ポリモーフィズム

  • コードを段階的に記述すると、図に示すような結果が得られます。

ここに画像の説明を挿入します

  • 書き込み手順

    1. Universe インターフェイスを定義し、抽象メソッド doAnything を提供します。
    2. 通常のクラス Star を定義し、メンバー Shine メソッドを提供します
    3. 通常クラスSunを定義し、Starクラスを継承し、Universeインタフェースを実装する
    4. テストクラスでStarオブジェクトを作成し、shinメソッドを呼び出します。
    5. テスト クラスで、ポリモーフィックな方法で Sun オブジェクトを作成し、doAnything メソッドを呼び出して下向きにキャストし、shin メソッドを呼び出します。
  • 参考回答:

		
		public class Test5 {
    
    
		    public static void main(String[] args) {
    
    
		        Star s  = new Star();
		        s.shine();
		
		        System.out.println("====================");
		
		        Universe universe = new Sun();
		
		        universe.doAnything();
		        Sun sun  = (Sun) universe;
		        sun.shine();
		    }
		}
		
		interface  Universe{
    
    
		    public abstract void doAnything();
		}
		
		class Star {
    
    
		    public void shine(){
    
    
		        System.out.println("star:星星一闪一闪亮晶晶");
		    }
		}
		class  Sun extends Star implements Universe{
    
    
		    @Override
		    public void doAnything() {
    
    
		        System.out.println("sun:太阳吸引着9大行星旋转");
		    }
		    @Override
		    public void shine() {
    
    
		        System.out.println("sun:光照八分钟,到达地球");
		    }
		}

おすすめ

転載: blog.csdn.net/zhangchen124/article/details/132487773