프로그래밍/자바(java) 융합개발자 2차

[취성패] 자바 배우기 - 선수학습(상속과 접근제어)

aSpring 2020. 12. 13. 14:24
728x90
728x90

[접근 지정자]

1. 접근 지정자 개요

- 접근 지정자 : 클래스의 멤버 변수 또는 메서드에 접근할 수 있는 수준을 나타내는 키워드

- 종류 : private, protected, public

  -> private : 클래스 내부에서만 접근 가능

  -> protected : 클래스 내부와 상속받은 클래스, 동일 패키지 내의 클래스에서 접근 가능

  -> public : 클래스 외부에서 제한 없이 접근 가능

- 생략 시 : 접근 지정자를 생략했을 경우 클래스 내부와 동일 패키지 또는 동일 디렉터리 내에서 접근 가능

- 일반적으로 멤버변수는 private으로, 메서드는 public으로 지정하여 멤버 변수에 쉽게 접근하지 못하도록 하고 메서드를 통해서만 접근할 수 있도록 함

 

 

2. 접근 지정자 활용

1) private 사용 예

class Car {

  private int speed = 100;    -> 이 클래스 내부에서만 접근 가능

}

 

class Truck extends Car {     -> car 클래스를 상속받음

  Truck()                          -> 생성자

    speed = 120;              //에러! 상속받은 클래스에서 접근 불가능

  }

}

 

public static void main(String args[]) {

  Truck truck = new Truck();

  truck.speed = 110;         //에러! 클래스 외부이므로 접근 불가능

}

 

2) protected 사용 예

class Car {

 protected int speed = 100;

}

 

class Truck extends Cart {

 Truck() {

  speed = 120;  //상속받은 클래스이므로 protected 멤버 변수에 접근 가능

}

 

public static void main(String args[]) {   -> 메인 메서드

 Truck car = new Truck();

 car.speed = 100; //동일 디렉터리 안에 있으므로 접근 가능

}

 

3) public 사용 예

class Car {

 public int speed = 100;

 public speedUp() {         -> speedUp 메서드 추가

   speed += 10;

 }

}

 

class Truck extends Car {    -> Truck 클래스 생성

 Truck() {

   speed = 120; //상속받은 클래스에서 제한 없이 접근 가능

 }

}

 

public static void main(String args[]) {

 Car car = new Car();

 car.speed = 110; //클래스 외부에서도 제한 없이 접근 가능

 car.speedUp();    //public 메서드의 경우 외부에서 제한없이 접근 가능

 Truck truck = new Truck();   -> Truck class를 객체 변수로 만들어 사용

 truck.speed = 100; //클래스 외부에서도 제한 없이 접근 가능

}

 

[실습]

1) 상속과 접근 지정자 사용 예

class Car2 {   -> Car2 클래스 선언

   private int speed = 100;

   public void speedUp() {  -> 반환 값이 없는 speedUp 메서드

       speed += 10;

   }

}

class Truck extends Car2 {   -> 상속받은 클래스

   private int weight = 50000;

}

public class Exam13_1 {    -> 메인이므로 제목 Exam13_1으로 지정해야 함

   public static void main(String[] args) {

      Truck truck = new Truck();   -> Truck 클래스의 객체 변수 truck 작성

      //truck.speed = 100;           -> speed 속성은 private이므로 클래스 외부에서 사용 불가

      truck.speedUp();                -> speedUp은 public이므로 사용 가능

      //truck.weight = 3000;        -> weight 속성도 private이므로 Truck클래스 외부에서는 접근 불가능

   }

}

 

2) 

728x90
728x90