728x90
상속
-
부모가 갖는 자원(필드,메소드)을 물려주는 것
-
관련키워드 extends =⇒ is a 관계
class My extends 부모클래스명{ } class Parent extends Object{ //Object: 최상위클래스, 기본값. } class Child extends Parent{ }
Object 클래스
: 최상위클래스. 자바의 모든 클래스의 부모클래스
java.lang.Object 부모클래스, 상위클래스, super
|
java.lang.String 자식클래스, 하위클래스, sub
캡슐화
- 필드와 메소드를 묶어주는 것
- 정보 은닉
- 모듈성
다형성
메소드 오버라이딩(MethodOverriding)
- 부모가 갖는 메소드를 자식클래스에서 재정의
- 상속에서 나온 개념
class Parent {
int x = 100;
void hello(){
System.out.println("안녕");
}
}
class Child {
int y = 30;
@Override
void hello(){
System.out.println("신짜오");
}
}
Parent p = new Parent(); //부모 메소드생성
Child c = new Child(); //자식 메소드생성
Parent p2 = new Child(); //부모 메소드 오버라이딩
Child c2 = (Child)p2; //자식클래스로 형변환한 부모메소드 오버라이딩
p2.hello(); (O) ==>Parent
p2.toString(); (O) ==> Object
p2.goodBye(); (X) ==> Child
-
Parent p2 = new Child();
-
부모 참조변수를 통해 자식 호출 불가하지만 오버라이딩한 자식 메소드가 존재한다면 부모 참조변수를 통해서 오버라이딩된 자식 메소드를 호출하는 것이 가능하다. 따라서 위의 예제에서 p2.hello(); 호출시 Child 클래스에 있는 오버라이딩 메소드 hello()를 호출하여 "신짜오"라는 문구가 호출된다.
-
자식 참조변수를 통해 부모 호출 가능.
Parent p = new Child(); O
// 자식은 부모다. Child클래스는 Parent클래스로 형변환이 가능하다
Child c = new Parent(); X ==>컴파일 에러
//부모는 자식에 대한 정보가 없기 때문에 형변환이 불가하다
-> 둘의 차이는 사용할 수 있는 멤버의 개수이다. 부모클래스는 부모클래스의 멤버만 사용할 수 있지만 자식클래스는 자식과 부모클래스의 멤버 모두 사용할 수 있다.
그렇기에 Child c = new Parent();
의 경우 참조할 수 있는 멤버가 자식클래스가 더 많기 때문에 이러한 접근은 불가하다.
메소드 오버로딩(MethodOverloding)
- 한 클래스 내에 동일한 메소드를 여러개 구현 (단, 인자의 갯수가 다르거나 자료형이 달라야 한다.)
class A {
void hello(){
System.out.println("안녕");
}
void hello(String name){ //메소드 오버로딩
System.out.println("안녕,"+name";
}
}
'Web develop > JAVA' 카테고리의 다른 글
[JAVA] 자바 접근제한자(AccessControl) (0) | 2019.04.21 |
---|---|
[JAVA] 자바클래스 생성자(Constructor) (0) | 2019.04.21 |
[자바] 주민번호 입력하여 나이구하기 (0) | 2019.04.21 |
[JAVA] 자바 데이터 입력 (System.in.read() , BufferedReader 사용) (0) | 2019.04.21 |
[JAVA] 조건문, 반복문 (0) | 2019.04.17 |