생성자
형태
접근제한자 메소드명=클래스명(매개변수)
중복된 생성자 있을 경우 this 사용
public TV(boolean power, int channel, int volume) {
System.out.println(" TV(boolean power, int channel, int volume) 생성자 호출");
this.power = power;
this.channel = channel;
this.volume = volume;
}
public TV(boolean power, int channel) {
this(power,channel,0);
System.out.println(" TV(boolean power, int channel) 생성자 호출");
/*this.power = power;
this.channel = channel;
*/}
public TV(boolean power) {
System.out.println(" TV(boolean power) 생성자 호출");
this.power = power;
}
public TV(){
System.out.println(" TV() 생성자 호출");
}
상속
일반화 + 확장의 개념으로, 부모가 가진 것을 자식이 물려받아 사용할 수 있다는 것을 의미함
접근제한자 [abstract|fianl] class 클래스명 extends 부모클래스명 { ....}
특징
- 자바는 다중 상속 허용하지 않음
- 모든 클래스는 Object의 자손이다.
- 다형성
- 메소드 오버라이딩(Overriding) : 상위 클래스의 메소드를 하위 클래스가 재정의하는 것
- 필드는 오버라이딩 되었을 때의 타입을 따른다.
- 메소드 오버라이딩(Overriding) : 상위 클래스의 메소드를 하위 클래스가 재정의하는 것
class Bird{
public void song(){
System.out.println("새가 노래하다.");
}
}
class Pigeon extends Bird{
@Override
public void song(){
System.out.println("구구");
}
}
class Duck extends Bird{
@Override
public void song(){
System.out.println("꽥꽥");
}
}
class Sparrow extends Bird{
@Override
public void song(){
System.out.println("짹쨱");
}
}
public class BirdExam {
public static void main(String[] args) {
Bird bird = null;
if(args[0].equals("비둘기")) {
bird = new Pigeon();
}else if(args[0].equals("오리")) {
bird = new Duck();
}else if(args[0].equals("참새")){
bird = new Sparrow();
}
bird.song();
}
}
- 다운캐스팅 (부모가 자식의 메소드를 사용)
- 하위 클래스로의 다운캐스팅 시 타입을 명시적으로 지정
- 명시적 형변환 시 instance of 연산자를 사용하여 Class에 속하는지 확인 후 true 값이 나올 때만 실행 (예시 2)
- p instanceOf Child일 경우, p가 Child이거나 Child를 상속받는 클래스라면 true를 리턴함.
- 명시적 형변환 시 instance of 연산자를 사용하여 Class에 속하는지 확인 후 true 값이 나올 때만 실행 (예시 2)
- 하위 클래스로의 다운캐스팅 시 타입을 명시적으로 지정
Car sb1 = new SeatBus();
Bus sb2 = new SeatBus();
//다운캐스트 방식
SeatBus sb = (SeatBus)sb1;
sb.좌석을예약하다();
// 혹은
((SeatBus)sb1).좌석을 예약하다();
예시 2
package Day06;
public class Parent {
int i =5;
public int getI(){
return i;
}
}
package Day06;
public class Child extends Parent {
int i = 10;
public int getI(){
return i;
}
}
public class Exam02 {
public static void main(String[] args) {
Child child = new Child();
System.out.println(child.i);
//상속
//1. 부모는 자식을 가리킬 수 있다.
Parent p =null; //Parent를 담을 수 있는 타입
Child c = null;
p = new Child(); // 묵시적 형변환이 일어남.
//c= new Parent(); 는 X. 자식이 부모를 가리킬(담을) 수 없다.
if(p instanceof Child) {
//명시적으로 형변환 할 때 instanceof를 사용해서 오류 방지
c = (Child) p; //실제로는 p가 가리키는 인스턴스가 Child임.
}
}
}
예시 3
package Day06;
public class Exam06 {
public static void test(Parent p){
System.out.println(p.i);
System.out.println(p.getI());
}
public static void main(String[] args) {
Parent p = new Parent();
System.out.println(p.getI());
Child c = new Child();
System.out.println(c.i);
System.out.println(c.getI());
Parent pc = new Child();
System.out.println(pc.i);
System.out.println(pc.getI());
test(p);
test(c);
test(pc);
}
}
// 출력값 //
5
10
10
5
10
5
5
5
10
5
10
'🏕 멋사 Java 백엔드 13기 > TIL' 카테고리의 다른 글
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 Java 부트캠프 11일차 | DB (1) | 2024.12.16 |
---|---|
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 Java 부트캠프 8일차 (1) | 2024.12.11 |
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 Java 부트캠프 4일차 (0) | 2024.12.05 |
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 Java 부트캠프 3일차 (1) | 2024.12.04 |
[멋쟁이사자처럼 부트캠프 TIL 회고] 백엔드 Java 부트캠프 2일차 (0) | 2024.12.03 |