Java継承


継承

  • の既存クラスを使用して新しいクラスを作成します.(コード再利用)
  • の2つの等級を親と子供として関係を築く.
  • 子孫は、祖先(親、親など)のすべてのメンバーを継承します.(ジェネレータおよび初期化ブロックを除く)
  • 子孫のメンバー数は、祖先より少なくはなりません.(同一または複数)
  • 子孫の変更は祖先には影響しなかった.
  • class子クラスextends親クラス{
    //...
    }
    class Parent { }
    class Child extends Parent {
       // ... 
    }
    public class EX7_1 {
        public static void main(String[] args) {
            Tv tv = new Tv();
            tv.channel = 10;
            tv.channelDown();
            System.out.println(tv.channel);
    
            SmartTv stv = new SmartTv();
            stv.channel = 10;
            stv.channelUp();
            System.out.println(stv.channel);
            stv.caption = true;
            stv.displayCaption("안녕하세요");
        }
    }
    
    class Tv{
        boolean power;
        int channel;
    
        void power(){
            power = !power;
        }
    
        void channelUp(){
            ++channel;
        }
    
        void channelDown(){
            --channel;
        }
    }
    
    class SmartTv extends Tv{
        boolean caption;
        void displayCaption(String text){
            if(caption){
                System.out.println(text);
            }
        }
    }

    単一継承


  • Javaは単一の継承のみを許可します.(C++は複数の継承を許可)
    Class TvDVD extends Tv,DVD{//error:オリジナルバージョンのみ許可
    //...
    }

  • インタフェースは、クラス間の競合を防止し、マルチ継承の効果を生成します.

  • インタフェースを使用しない場合、複数の継承効果が発生します.
  • の比重の高いクラスの1つだけが継承関係であり、残りは包含関係である.
  • class MyTv{
        boolean power;
        int channel;
    
        void power(){power = !power;}
        void channelUp(){ ++channel;}
        void channelDown(){ --channel;}
    }
    
    class DVD{
        boolean power;
    
        void power(){power = !power;}
        void play(){/* 내용 생략 */}
        void stop(){/* 내용 생략 */}
        void rew(){/* 내용 생략 */}
        void ff(){/* 내용 생략 */}
    
    }
    
    class TvDVD extends Tv{
        DVD dvd = new DVD();
    
        void play(){ // 껍데기를 만들어주어 인스턴스 레벨에서 바로 사용할 수 있게 한다.
            dvd.play();
        }
    
        void stop(){
            dvd.stop();
        }
    
        void rew(){
            dvd.rew();
        }
    
        void ff(){
            dvd.ff();
        }
    
    }   

    Objectクラス-すべてのクラスの親


    親クラス
  • のないクラスは、オブジェクトクラスを自動的に継承します.(コンパイラ自動追加)
  • したがって、すべてのクラスは、Objectクラスで定義された11のメソッドを継承します.
  • toString(), equals(Object obj), hashCode(), ...