1.클래스 상속
부모 클래스에서 자식클래스에 필드,메소드를 상속해준다.
1-1.상속
class 자식클래스 extends 부모클래스 {}
형식으로 상속을한다.
package a9_Inheritance;
public class Car {
int speed=10;
int tire_num=4;
String name="그냥차";
}
class super_car extends Car{
int speed=100;
String name="슈퍼챠";
}
package a9_Inheritance;
public class a9 {
public static void main(String[] args){
super_car car1= new super_car();
System.out.println(car1.speed);
System.out.println(car1.name);
System.out.println(car1.tire_num);
}
}
//출력
100
슈퍼챠
4
1-2.부모 생성자 호출
자바는 자식객체를 생성할때 부모 객체가 생성된후 자식 객체가 생성된다.
이는 자바가 자식 생성자에 super()을 자식 생성자 맨 첫출에 만들어서 부모 생성자를 호출하게 만든것이다.
super()에 매개값을 넣어 명시적으로 부모 생성자를 호출할수도있다.
package a9_Inheritance;
public class Car {
int speed;
int tire_num=4;
String name;
Car(int speed, String name){
this.speed=speed;
this.name=name;
}
}
class super_car extends Car{
super_car(int speed, String name){
super(speed,name);
}
}
package a9_Inheritance;
public class a9 {
public static void main(String[] args){
super_car car1= new super_car(44,"붕붕이");
System.out.println(car1.speed);
System.out.println(car1.name);
System.out.println(car1.tire_num);
}
}
//출력
44
붕붕이
4
1-3.오버라이딩
부모의 메소드를 자식 클래스에 맞게 재정의 하는것을 오버라이딩이라고한다.
이떄 부모 메소드와 동일한 리턴타입,메소드이름,매개변수 목록을 가져야하고
접근 제한을 더 강하게 제한할수없다.
package a9_Inheritance;
public class Car {
void run(){
System.out.println("그냥차 달린다.");
}
}
class super_car extends Car{
void run(){
System.out.println("슈퍼챠 달린다");
}
}
package a9_Inheritance;
public class a9 {
public static void main(String[] args){
super_car car1= new super_car();
car1.run();
}
}
//출력
슈퍼챠달린다
1-4.부모 메소드 호출
자식 클래스에서 재정의 후에도
super.부모 메소드(); 로 부모 클래스의 메소드를 사용할수있다.
package a9_Inheritance;
public class Car {
void run(){
System.out.println("그냥차 달린다.");
}
}
class super_car extends Car{
void run(){
System.out.println("슈퍼챠 달린다");
}
void run2(){
super.run();
}
}
package a9_Inheritance;
public class a9 {
public static void main(String[] args){
super_car car1= new super_car();
car1.run();
car1.run2();
}
}
//출력
슈퍼챠 달린다
그냥차 달린다.
2. final
final 키워드를 class 앞에 붙이면 최종적인 클래스라는 의미로
상속할수없는 클래스가된다(부모 클래스가 될수없다.)
final 키워드를 메소드 앞에 붙일경우
자식클래스에서 오버라이딩 할수없는 메소드가 된다.
final class InnerCar {}
final void run(){}
'Language > JAVA' 카테고리의 다른 글
[Java] 타입 변환과 다형성 (0) | 2024.05.16 |
---|---|
[JAVA] 패키지, 접근 제한자, getter,setter (0) | 2024.05.15 |
[JAVA] 인스턴스멤버, 정적멤버, 싱글톤, 상수 (0) | 2024.05.15 |