[Java]OOPオーバーライド(Overriding)


オーバーライド(Override)


先祖クラスから継承するメソッドの内容を継承するクラスによって変更することを上書きと呼ぶ.
//override:「~上書き(上書き)」
それを過負荷と混同してはいけない.
最終位置決め:メソッドオーバーロード
class Point { //2차원 좌표
	int x;
    int y;
    
    String getLocation() {
    	//2차원 좌표의 위치 
    	return "x:"+x+",y:"+y;
    }
}

class Point3D extends Point { //상속, 3차원 좌표상의 점
	int z;
    
    String getLocation() { //오버라이딩 : 조상 변경
    	return "x:"+x+",y:"+y+"z:"+z;
    }
}

上書き条件*

  • 宣言部のはずです.(名前、パラメータ、戻りタイプ)
  • class Point { 
    	int x;
        int y;
        
        String getLocation() { //선언부 1번
        	return "x:"+x+",y:"+y;
        }
    }
    
    class Point3D extends Point { 
    	int z;
        
        String getLocation() { //선언부 2번
        	return "x:"+x+",y:"+y+"z:"+z;
        }
    }
    
    //선언부 1번과 2번이 같다(메소드이름, 반환타입, 매개변수 목록) 

  • アクセス制御者をより小さな範囲に変更することはできません.

  • 祖先クラスメソッドよりも数が多い例外は宣言できません.
  • class Parent {
    	void parentMethod() throws IoException, SQLException { //예외 선언, 메소드 개수 : IoException 1개, SQLException 1개 = 2개 
        	...
        }
    }
    
    class Child extends Parent {
    	void parentMethod() throws IoException { //예외 선언, 메소드 개수 : IoException 1개
        	...
        }
    }

    過負荷と過負荷の違い


    =>二人は全く関係ありませんが、名前のため混同しています.
    overriding(Overriding):新しいメソッドの定義(new method)
    オーバーロード:継承メソッドの内容を変更する(change,modify method)
    class Parent{
    	void parentMethod() {}
    }
    
    class Child extends Parent {
    	void parentMethod() {} //조상의 메소드를 변경한 것 => 오버라이딩
        void parentMethod(int i) {} // 이름이 같은 메소드를 매개변수(int i)만 다르게 해서 정의 => 오버로딩
        
        void childMethod() {} // 그냥 메소드 정의
        void childMethod(int i) {} // 오버로딩
        void childMethod() {} // 중복정의 -> 에러 발생
    }