상속
1. 부모 클래스의 자원을 자식 클래스에서 사용 가능
2. 두 클래스 관계를 설정하는 것
3. 물려주는 쪽이 부모 클래스가 되고 받는 쪽이 자식 클래스가 된다.
4. extends 키워드를 사용한다.
5. 부모 클래스 = super 클래스 = 기초클래스: 멤버를 물려준다.
자식클래스 = 하위 클래스 = sub클래스: 멤버를 물려 받는다.
6. 객체 생성시 찾아가는 생성자는 부모 생성자를 먼저 찾아간다.
7. 상속 받은 내용을 재정의할 수 있다. (오버라이딩)
public class Car_Extends {//부모 클래스
String name;
int speed, price;
public void setOption(int speed, int price) {
this.speed = speed;
this.price = price;
}
public void total() {
System.out.println("자동차 속도: " + this.speed + " / 가격: " + this.price);
}
public void pandan() {
System.out.println("자동차 잘 샀다");
}
public static void main(String[] args) {
//Child 클래스에 아무것도 작성 안하고 extends 만 해서
//부모의 기능을 사용가능
//또 자식 자체의 속성과 메소드도 사용 가능
Child child = new Child();
//부모 클래스의 기능들
child.setOption(220, 50000);
child.total();
child.pandan();
//Child 클래스의 기능
child.right();
}
}
class Child extends Car_Extends { //자식 클래스
public void right() {
System.out.println("응애 나 애기 자동차"); //자신만의 기능을 만들면 확장 했다고 표헌한다.
}
}
부모 클래스에 매개변수가 있는 생성자가 있는 경우 super()
package programmers;
public class Parent_01 {
int age = 50;
String name = "부모";
Parent_01(){
System.out.println("나는 부모 생성자");
}
public Parent_01(int age, String name) {
this.age = age;
this.name = name;
System.out.println("나는 부모 생성자(매개변수 2개");
System.out.println("나는 부모 생성자 나이: " + age + " / 이름: " + name);
}
public void pr(int age, String name) {
System.out.println("자식 클래스에서 호출되어 출력 나이: " + age + " / 이름: " + name);
}
public static void main(String[] args) {
//부모 클래스에 매개변수 생성자가 있는 경우
//자식 클래스에서 매개변수 생성자를 만들고
//super가 부모클래스 이니깐 super(부모 생성자에 넣을 매개변수)
Hong hong = new Hong(10, "홍길동");
hong.pr(10,"홍길동");
}
}
class Hong extends Parent_01 {
Hong(int age, String name){
super(10, "부모이름");
}
}
오버라이딩(overriding)
상속받은 자식클래스에서 같은 메소드의 내용을 재정의 할 수 있다.
상속받은 경우에만 사용가능
class Apt {
int room = 3;
void door() {
System.out.println("부모클래스 호출: 문은 "+room+"개 입니다.");
}
}
//상속받은 자식클래스에서 같은 이름의 메소드를 재정의(오버라이딩)할 수 있다.
class Dan extends Apt {
@Override //컴파일시 재정의한 메소드인지 검증 부모 메소드명과 다르면 오류 발생
void door() {
System.out.println("자식클래스 호출, 메소드 재정의(오버라이딩): 도어락은 " + room+"개 입니다.");
}
}
public class House {
public static void main(String[] args) {
Apt apt = new Apt();
Dan dan = new Dan();
apt.door(); //부모클래스 door() 메소드 호출
dan.door(); //자식클래스 door() 오버라이딩한 메소드 호출
Apt apt2 = new Dan(); //Apt(부모클래스) 타입으로 apt2 인스턴스를 만들고 Dan()(자식클래스) 형태로 객체화 시키면
apt2.door(); //자식클래스의 오버라이딩한 메소드가 출력된다.
}
}
오버로딩(Overloading) *상속이랑은 무상관
같은 메소드 명을 가지고 있지만 매개변수 형태, 개수, 타입, 순서 등등에 따라 다르게 처리
class Over {
void a() {
System.out.println("1번 a메소드");
}
void a(int a, String b) {
System.out.println("2번 a메소드: " + a +" : "+ b);
}
void a(String a, String b) {
System.out.println("3번 a메소드: " + a+" : " + b);
}
}
public class Overlode_01 {
public static void main(String[] args) {
Over over = new Over();
//같은 메소드지만 오버로딩되어 각각 다른 내용과 매개변수 형태가 다르다
over.a();
over.a(1, "2번");
over.a("3번", "메소드");
}
}
'JAVA > 기본' 카테고리의 다른 글
인터페이스(interface) implements (0) | 2023.09.01 |
---|---|
추상 클래스 (abstract class) / 추상 메소드 (abstract method) (0) | 2023.08.30 |
생성자(Constructor) (0) | 2023.08.22 |
wrapper class 래퍼클래스(포장 클래스) (참조타입) (0) | 2023.08.17 |
기본적인 타입 (0) | 2023.08.16 |