0
0

More than 3 years have passed since last update.

【Java】ポリモーフィズム:フィールド・メソッドは型とインスタンスのどちらが優先される?

Last updated at Posted at 2021-05-11

はじめに

JavaSilver:継承とポリモーフィズムの問題

ポリモーフィズムについて、
継承関係にある2つのクラス内に同名のフィールド・メソッドがあった場合、
どちらが優先されるのか分からなくなったのでまとめる

*「継承関係にある2つのクラス内に同名のフィールド・メソッドがあった場合」というのは、以下のコードのようなものである*

public class A{
    String val = "A";
    public void sample(){
       System.out.print(val);    
    }
}

public class B extends A{
    String val = "B";
    public void sample(){
        System.out.print(val);
    }
}

結論

  • フィールドを参照した場合
    • ->変数の型で宣言されたものが優先
  • メソッドを参照した場合
    • ->オーバーライドされたものがあるならそちらを優先
    • ->なければスーパークラスのものを優先
    • (スーパークラスにそのメソッドがなければコンパイルエラー)

具体例

public class A{
    String val = "A";
    public void sample(){
       System.out.print(val);    
    }
}

public class B extends A{
    String val = "B";
    public void sample(){
        System.out.print(val);
    }
}

public class Main{
     public static void main(String[] args){
         A a = new A();
         A b = new B(); //B型インスタンスをA型に代入
         System.out.print(a.val);
         System.out.print(b.val);
         a.sample(); 
         b.sample(); 
    }
}

出力結果
AAAB

ちなみに、ポリモーフィズムでない継承関係については、
もちろんサブクラスの方が優先される

class A{
    String val = "A";
    public void sample(){
       System.out.print(val);    
    }
}

class B extends A{
    String val = "B";
    public void sample(){
        System.out.print(val);
    }
}

public class Main{
     public static void main(String[] args){
         B c = new B();
         System.out.print(c.val);
         c.sample();
    }
}
出力結果
BB

おわりに

こちらのQ&Aが個人的にドンピシャだったので載せておきます

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0