상속(Inheritance) 정의
특정 클래스의 변수, 메소드를 확장,상속해서 다른 클래스가 갖도록 하는 것
상속의 장점
- 코드의 재사용성up
- 유지보수 편의성 up
- 가독성 up
- 코드의 양 down
- 부모클래스(=superClass)
- 자식클래스(=subClass)
부모 클래스 기능에서 자식 클래스에 추가 & 재정의(오버라이딩) 가능
오버라이딩(Overriding)
부모가 가진 기능을 재정의(수정)하는 것을 오버라이딩(Overriding)
예시)
class Cal33 extends Cal11{ // extends : Cal1을 상속
public int minus(int v1, int v2) {
return v1-v2; // Cal3는 이제 부모 클래스가 없는 마이너스 기능도 탑재
}
public int sum(int v1, int v2) {
System.out.println("Cal3!!");
return v1+v2; // 부모가 가진 기능을 재정의(수정)
}
}
오버로딩(Overloading)
뜻 : 과적하다
부모클래스도 자식클래스도 오버로딩 가능. 자식 클래스는 부모 클래스를 오버라이딩, 오버로딩 둘 다 가능
자바는 형태만 다르면 같은 이름의 메소드를 같은 클래스 내에서도 여러개 사용 가능
class Cal11 {
public int sum(int v1, int v2) {
return v1+v2;
}
public int sum(int v1, int v2, int v3) { // 같은 이름 메소드 // int v3 추가
return v1+v2+v3;
}
}
this는 자기 자신
class Cal111 {
// this
// 자기 자신을 뜻함
public int sum(int v1, int v2, int v3) {
return this.sum(v1,v2)+v3; // .sum() 자기자신
}
}
super는 자신의 부모
자식 클래스의 메소드가 부모 클래스의 메소드를 호출하고 그 결과를 이용할 수 있게 하는 것
super.부모클래스의 메소드명;
breakpoint로 디버깅체크 가능
public int sum(int v1, int v2){
return super.sum(v1,v2);
}
super의 사용 예시
class Cal1111 {
int v1,v2; // 정수 데이터타입 세팅
Cal1111(int v1, int v2) { // 생성자
this.v1 = v1; this.v2 = v2; // this.v1의 v1은 class Cal1111 { 아랫줄 int v1
//매개변수에 들어온 값 // this.v1 = v1;에서 v1;은 Cal1111(int v1, int v2)에서 int v1
System.out.println("Cal init!!!");
}
}
class Cal3333 extends Cal1111{ // extends : Cal1을 상속
Cal3333(int v1, int v2) {
**super**(v1, v2); // **super**=부모클래스. 즉,부모클래스의 생성자를 실행시킴.
// 부모클래스의 생성자는 아래와 같다
// Cal1111(int v1, int v2) {
// this.v1 = v1; this.v2 = v2;
System.out.println("Cal3 init!!!");
}
}
public class Inheritance05 {
public static void main(String[] args) {
// new cal() 안에 입력값 2,1 새로 입력
Cal1111 c1 = new Cal1111(2,1); // 출력 : 클래스cal1에서 println() 한번만 출력
Cal3333 c3 = new Cal3333(2,1); // 출력 : super(v1, v2); 이 문구가
// 클래스cal1에서 println() 한번 출력시키고
// 클래스cal3에서 println() 한번 출력시켜 두번출력
}
}
생성자(Constructor)
자식 클래스에서 부모클래스를 계승 받아 실행하게 될 때, 반드시 부모클래스의 생성자를 실행해야한다
ex)
class Cal1111 {
int v1,v2; // 정수 데이터타입 세팅
Cal1111(int v1, int v2) { // 생성자
this.v1 = v1; this.v2 = v2;
//매개변수에 들어온 값
}
}
class Cal3333 extends Cal1111{ // error 발생
}
public class Inheritance05 {
public static void main(String[] args) {
Cal1111 c1 = new Cal1111(2,1); // new cal() 안에 입력값 2,1입력
Cal3333 c3 = new Cal3333();
}
}
생성자(Constructor) 메커니즘
오리지널 클래스(cal)를 제대로 계승했다면, Cal이 인스턴스로 만들어질 때 반드시 해야되는 일들이 생성자에 들어있다. 때문에 이 생성자를 Cal3도 실행시켜야만 제대로 작동한다
다형성(Polymorphism)
자식 클래스를 부모클래스로써 동작하도록 규제하는 기능
ParentClass obj = new ChildClass()
다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것
자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현
접근제어자(Access Modifers)
public, default, protected, private
클래스,메소드,변수를 사용자들이 아무거나 건드리지 못하게 제한하는 기능
Final
내가 만든 클래스를 다른 사람이 더이상 상속하게 하고 싶지 않을 때
메소드를 오버라이딩(Overriding)하게 하고 싶지않을 때
변수를 다른 사람이 마음대로 수정하게 하고 싶지 않을 때
이런 규제를 하고 싶다면 final을 사용
Abstract
final과 반대
클래스를 상속해서 사용하려는 사람에게 어떤 특정 메소드는 꼭 구현해라라고 강제하고 싶은 메소드가 있다면 사용
상속자가 직접 구현해야 하는 기능을 구현하도록 강제할 수 있다
Abstract Class Imcompletion
'JAVA > 생활코딩 JAVA 상속' 카테고리의 다른 글
Java 상속(Inheritance) - 6. 수업을 마치며 : 다형성(Polymorphism), 접근제어자, Final, Abstract (0) | 2022.02.06 |
---|---|
Java 상속(Inheritance) - 5. 상속과 생성자 (0) | 2022.02.06 |
Java 상속(Inheritance) - 4. this & super (0) | 2022.02.06 |
Java 상속(Inheritance) - 3. Overriding vs Overloading (0) | 2022.02.06 |
Java 상속(Inheritance) - 2. 기능의 개선과 발전 : 자식클래의 기능 추가 & 수정 (0) | 2022.02.06 |