🔥 Vamos/Java

1006 | 자바의 정석 기초편 :: ch7-5~7-9

unikue 2022. 10. 6. 12:24

단일 상속

 

✔ 단일상속이란?

: 자바는 단일상속만 허용 (하나의 부모만 상속)

class TVDVD extends TV,DVD{} // 불가. 충돌로 인한 문제로 자바 이후 oop 언어는 단일상속으로 가고 있음

: 자바는 다중상속 대신 인터페이스 사용

: 인터페이스 외에도 비중이 높은 클래스 하나만 상속관계로 , 나머지는 포함관계로

 

비중 높은 TV 는 상속관계를 만들고, VCR은 메서드만 호출하는 식으로 포함시킨다.

 

 

 

Object 클래스- 모든 클래스의 최고 조상

 

✔ Object class

: 상속계층도의 최상위에는 Object class가 있음 👉 조상이 없는 클래스는 자동적으로 Object class를 상속받게됨

: 모든 클래스는 Object class에 정의된 11개의 메서드가 상속됨 (toString(), equals(Object obj), hashCode()...)

 

class TV extends Object{} // tv는 조상클래스가 없으므로 컴파일 할경우 컴파일러가object를 자동추가해줌.

class CaptionTv extends TV{}

 


 

(메서드)오버라이딩 (overriding)

 

✔오버라이딩

: 상속받은 조상의 메서드를 자신에 맞게 변경하는것.

: 선언부는 못바꾸고 구현부만 바꿀 수 있다.

 

class Point1{
	int x; int y; 
    String getlocation(){
    	return"x:"+x+"y:"+y;
    	}
  }
  
 class Mypoint1 extends Point1{
 	int z;
 	//	 String getlocation(){
    	return"x:"+x+"y:"+y+"z:"+z;	// 여길 추가해야 z값까지 출력. 오버라이딩 부분.
 }
 
 public class OverideTest{
 	Point1 p = new Point1();
    p.x = 3;
    p.y = 4;
    p.z = 2; // 여기서 실행해도 z값은 나오지 않음. 겟로케이션에 z값이 없기 때문
    
 // Object 의 toString()을 오버라이딩해놨을 때 println(p.toString()) == println(p)

이렇게 오버라이딩 하면 z도 String으로 받는 값임을 알 수 있다. 따로작성하는것 보다 오버라이딩 쓰는게 나은 이유.

 

 

✔오버라이딩의 조건

① 선언부가 조상클래스 메서드와 동일 ( 메서드이름, 매개변수, 리턴타입)

② 접근제어자를 좁은 범위로 변경 불가 (조상 메서드가 protected라면 범위가 같거나 더 넓은 protected or public만 가능)

③ 조상 클래스의 메서드보다 더 많은 예외 선언 불가

 

 

오버로딩 vs 오버라이딩

✔ 오버로딩 (overloading)// 과적하다, 과부하

: 동일 이름으로 기존에 없는 새로운 메서드 정의 (new)

: 이름이 같을 뿐 그냥 새로운 메서드!

 

✔ 오버라이딩 (overriding) // 덮어쓰기

: 상속받은 메서드의 내용을 맞게 변경하는것 (change, modify)

 

class Parent{
	void parentMethod(){}
    }
    
class Child {
	void ParentMethod(){} // 오버라이딩. 상속
    void parentmethod(int x){} // 오버 로딩.
    
    void ChildMethod(){} // 새 메서드 생성
    void ChildMethod(int y){} // 오버로딩
    void ChildMethod(){} // 중복정의. error.
    }