본문 바로가기

웹 개발/Java

[Web_JAVA] 19

● 접근 권한 제어자(접근자)

1. default

- 다른 패키지에서 접근 불가

 

2. public

- 모든 곳에서 접근 가능

- 대표 클래스를 의미할 때 사용한다.

- 모든 파일에서 public 클래스는 1개이다.

 

3. protected

- 다른 패키지에서 접근 불가(자식은 허용)

 

4. private

- 다른 클래스에서 접근 불가

 


 

● 객체 간 타입 비교

1. instanceof

- 객체 instanceof 클래스타입 : 조건식(true 또는 false 중 하나가 나오는 식)

- 객체가 클래스타입이면 true

- 객체가 클래스타입이 아니면 false

 

 


 

실습(상속)

1. 부모 클래스(Car) 작성하기

class Car{
	// 변수
	// 브랜드, 색상, 가격
	String brand;
	String color;
	int price; 
	
	
	// 기본 생성자
	public Car() {;}


	// 초기화 생성자
	public Car(String brand, String color, int price) {
		super();
		this.brand = brand;
		this.color = color;
		this.price = price;
	}
	
	
	// 메소드
	// "열쇠로 시동 킴" 출력
	void engineStart() {
		System.out.println("열쇠로 시동 킴");
	}
	
	
	// "열쇠로 시동 끔" 출력
	void engineStop() {
		System.out.println("열쇠로 시동 끔");
	}
	
}

 

 

 

2. 자식 클래스(SuperCar) 작성하기

class SuperCar extends Car{
	// 변수
	// 브랜드, 색상, 가격(Car 클래스와 일치하므로 따로 작성할 필요가 없다.)
	// 모드 
	String mode;
	
	
	// 기본 생성자
	public SuperCar() {;}
	
	
	// 초기화 생성자
	public SuperCar(String brand, String color, int price, String mode) {
		super(brand, color, price);  // 부모 클래스(Car)에서 작성한 정보를 가져온다.
		this.mode = mode;
	}
	
	
	// 메소드
	// "열쇠로 시동 킴", "음성으로 시동 킴" 출력
	@Override  // 재정의
	void engineStart() {
		super.engineStart();  // 부모 클래스(Car)의 engineStart() 메소드도 실행한다.
		System.out.println("음성으로 시동 킴");
	}
	
	
	// "음성으로 시동 끔" 출력
	@Override
	void engineStop() {  // 부모 클래스(Car)의 engineStop() 메소드는 실행하지 않고 재정의만 한다.
		System.out.println("음성으로 시동 끔");
	}
	
	
	// "지붕 열림" 출력
	// 부모 클래스에는 없는 새로운 메소드
	void openRoof() {
		System.out.println("지붕 열림");
	}
	
	
	// "지봉 닫힘" 출력
	// 부모 클래스에는 없는 새로운 메소드
	void closeRoof() {
		System.out.println("지붕 닫힘");
	}
	
}

 

 

 

3. main 메소드에서 실행

public class Road {
	public static void main(String[] args) {
		
		Car matiz = new Car();  // 부모
		SuperCar ferrari = new SuperCar("Ferrari", "RED", 35000, "sport");  // 자식
		
		matiz.engineStart();  // 부모
		 
		ferrari.engineStart();  // 자식
		ferrari.engineStop();  // 자식
		ferrari.openRoof();  // 자식
		ferrari.closeRoof();  // 자식
		
	}
}

 

결과

 

 

 

 

실습(접근자)

1. Access.java 파일을 생성하여 private 변수와 public 메소드를 생성한다.

public class Access1 {

	int data1 = 10;
	public int data2 = 20;
	protected int data3 = 30;
	private int data4 = 40;

	// public 메소드와 private 변수
	public int getData4() { 
		return data4;
	}
	
	public void setData4(int data4) {
		this.data4 = data4;
	}
	
}

 

 

 

2. Access3.java 파일을 생성하여 Access1에서 생성한 변수 및 메소드를 사용한다.

import access1.Access1;

public class Access3 {
	public static void main(String[] args) {
 
		Access1 a1 = new Access1();
		Access3 a3 = new Access3();
		
		// private 변수는 메소드를 통해 사용할 수 있다.
		a1.setData4(400);
		System.out.println(a1.getData4());
		
	}
}

 

결과

 

 

 

 

실습(instanceof)

※ 부모클래스(Car)와 자식 클래스(SuperCar) 작성

class Car{

   public void engineStart() {
      System.out.println("열쇠로 시동 킴");
   }

}


class SuperCar extends Car{
   
   @Override  // 재정의
   public void engineStart() {
      System.out.println("음성으로 시동 킴");
   }
   
   public void openRoof() {   // 부모 클래스에는 없는 새로운 메소드
      System.out.println("지붕 열림");
   }

}

 

 

- main 메소드에서 실행

public class CastingTest {
   public static void main(String[] args) {

	   Car matiz = new Car();  // 부모
	   SuperCar ferrari = new SuperCar();  // 자식
	   Car noOptionFerrari = new SuperCar();  // 부모 타입으로 up casting
	   SuperCar fullOptionFerrari = (SuperCar)noOptionFerrari;  // 자식 타입으로 down casting
	   
	   System.out.println(matiz instanceof Car);   // true
	   System.out.println(matiz instanceof SuperCar);  // false
	   System.out.println(ferrari instanceof Car);  // true(부모에게 상속받은 자식 클래스)
	   System.out.println(ferrari instanceof SuperCar);  // true
	   System.out.println(noOptionFerrari instanceof Car);  // true(부모 타입으로 up casting)
	   System.out.println(noOptionFerrari instanceof SuperCar);  // true(부모 타입이지만 자식 타입의 값을 가짐)
	   System.out.println(fullOptionFerrari instanceof Car);   // true(부모에게 상속받은 자식 클래스)
	   System.out.println(fullOptionFerrari instanceof SuperCar);  // true
	   
   }
}

 

결과

 

 

 

 

 

'웹 개발 > Java' 카테고리의 다른 글

[Web_JAVA] 21  (0) 2022.03.07
[Web_JAVA] 20  (0) 2022.03.06
[Web_JAVA] 18  (0) 2022.03.04
[Web_JAVA] 17  (0) 2022.03.03
[Web_JAVA] 16  (0) 2022.03.02