1. 오버라이딩(**)

 

- 부모클래스의 메소드를 자식클래스에서 수정하고자 할때 오버라이딩을 한다.

- 만드는 방법 : 부모클래스의 메소드명,파라미터갯수,타입 모두 일치해야 한다.

 

예)

class AA{
     public void show(){...}
}
class BB extends AA{
    //오버라이딩
    public void show(){
          //수정할 내용;
   }

   //오버로딩
   public void show(int a){
           ..
   }
}

 

 

- 오버라이딩할때 접근지정자는 부모의 접근지정자보다 범위가 좁으면 안된다. 최소한 같거나 넓어야 한다.

 

 

[ 접근지정자 ]
private : 자신의 클래스내에서만 접근(자식클래스접근x)
default : (접근지정자를 쓰지 않은 경우)같은 패키지내에서만 접근 가능
protected : 같은 패키지내에서, 패키지가 달라도 자식클래스는 접근 가능
public : 어디서든 접근 가능

 

  
- 범위의 크기
  private < default < protected < public

 

 

ex>

class MyShape
{
    protected int x,y;
    public MyShape(int x,int y){
        this.x=x;this.y=y;
    }
    public void draw(){
        System.out.println("x좌표:"+x+",y좌표:"+y);
    }
}
class MyRect extends MyShape
{
    public MyRect(int x,int y){
        super(x,y);
    }
    //오버라이딩
    public void draw()
    {
        //부모에 있는 draw() 호출!
        super.draw();
        System.out.println(x+","+y+"의 좌표에 사각형을 그려요!");
    }

    //오버로딩!
    public void draw(String color)
    {
        System.out.println(color+"색상으로 " +x+","+y+
            "의 좌표에 사각형을 그려요!");
    }
    // 이미 존재한다고 오류 메시지 나옴.
    //public String draw(){//오류==>오버로딩도 오버라이딩도 아님!
    //    return x+","+y+"의 좌표에 사각형을 그려요!";
    //}
}

class Test06_Overriding
{
    public static void main(String[] args)
    {
        MyRect mr=new MyRect(100,200);
        mr.draw();//
    }
}

 

 

 


ex>

class MyShape
{
    private double x,y;
    public MyShape(double x,double y){
        this.x=x;this.y=y;
    }
    public double getX(){
        return x;
    }
    public double getY(){
        return y;
    }
}
class MyRect extends MyShape
{
    //부모가 파라미터를 갖는 생성자를 갖고 있다면
    // 자식생성자에서 부모생성자를 호출해
    // 파라미터를 넘겨 주어야 한다.!
    public MyRect(double x,double y){
        //부모생성자 호출!
        super(x,y);
    }
    public double getArea(){
         return getX()*getY();
    }
}
class Test07_inheritance
{
    public static void main(String[] args) {
        //MyShape sh=new MyShape(); ==> 오류
        MyRect mr=new MyRect(1,2);
        System.out.println("사각형넓이:"+mr.getArea());
    }
}

 

 

 

 


2.  final 의 용도

 

1. 변수앞에 final을 붙여서 상수로 만든다.
       final double PI=3.14;

 

2. 메소드앞에 final이 붙으면 ==> 오버라이딩 할 수 없다.

 

3. 클래스앞에 final이 붙으면 ==> 상속받을 수 없다.

 

ex>

final class  AA{
    //오버라이딩 불가!
    public final void show(){
        System.out.println("AA");
    }
}
class BB extends AA{
    //public void show(){ //오류 발생!
    //    System.out.println("BB");
    //}
}
class Test08_final{
    public static void main(String[] args){
       
    }
}

 

 

 

 

'JAVA' 카테고리의 다른 글

추상 클래스 - 메소드 / 인터페이스 / Object  (0) 2014.09.12
클래스간 형변환 / 다형성  (0) 2014.09.12
상속  (0) 2014.09.12
this  (0) 2014.09.12
객체배열  (0) 2014.09.12

+ Recent posts