● 접근 권한 제어자(접근자)
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(); // 자식
}
}
![](https://blog.kakaocdn.net/dn/JtUnz/btruZPWHdzM/xkvQrJWNWHp5oVZMlJsmL0/img.png)
실습(접근자)
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());
}
}
![](https://blog.kakaocdn.net/dn/xfgay/btru0u5iYth/kmAk5VbYeBAWx76HgAKpI0/img.png)
실습(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
}
}
![](https://blog.kakaocdn.net/dn/bPHIuA/btru4jJikT3/CnF0lqqNPD083Sytu02GI0/img.png)
'웹 개발 > 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 |