class Mother{
String name;
Mother(String name){
this.name = name;
}
void action() {
System.out.println("cooking");
}
}
class Son extends Mother{
Son() {
super("아들");
System.out.println("new Son: "+name);
}
/* void action() {
System.out.print("Son action overriding: ");
System.out.println("Soccer play");
}
*/
}
class Daughter extends Mother{
Daughter() {
super("딸");
System.out.println("new Daughter: "+name);
}
void action() {
System.out.print("Daughter action overriding: ");
System.out.println("Doll play");
}
}
public class AUser1 {
public static void main(String[] args) {
Mother mother = new Mother("엄마");
mother.action();
System.out.println();
Son son = new Son();
son.action(); //mother.action method call
System.out.println();
Daughter daughter = new Daughter();
daughter.action(); //overriding method call (Daughter.action call)
System.out.println();
Mother littleMom = daughter; //Implicit Type Casting
littleMom.action(); //overriding method call (Daughter.action call)
System.out.println();
//Son sSon = (Son) mother;
//sSon.action();
Daughter sDaughter = (Daughter) littleMom; //Explicit Type Casting
sDaughter.action();
System.out.println(sDaughter.name);
}
}
OOP(Object Oriented Programming)의 특성
this : 자기자신의 객체 의미 [대명사]
super : 부모의 객체 의미 [대명사]
(1)상속성(Inheritance) ?
부모의 '모든 것'을 자식에게 '상속 받는 것'
-'자식객체'가 생성되며 먼저 '부모객체'가 생성되어야 한다.
-JVM이 기본생성자(default constructor)를 만들어 준다(다른 생성자가 하나도 없을 때만)
-모든 생성자의 첫 라인에는 super();가 생략되어 있다. (단, 다른 super(...)가 있다면 예외)
-부모 메소드의 내용을 자식에서 바꿀 수 있다. (Overriding)
-모든 객체는 Object 자식 (묵시적 상속)
-형변환은 상속관계에서만 가능
>자동 형변환 by JVM (자식>부모)
>>업 캐스팅
>강제 형변환 by 개발자 (부모>자식)
>>다운 캐스팅
:daughter >> mother >> daughter 은 가능하지만, daughter >> mother >> son은 불가능하다.
다운캐스팅은 반드시 전제가 있어야 한다. 업캐스팅 하기전의 타입으로 캐스팅 되는것
-형제관계는 남남과 같다.
(2)다형성(Polimorphism) ?
같은 타입의 객체의 '같은 메소드'가 다른 일을 하는 특성 == 오버라이딩, 형변환
(3)은닉성(Information Hiding) ?
외부 객체로부터 '속성값(데이터)'을 감추는 특성
:다른 클래스의 private String str = "은닉성";은 getter, setter를 통해서 접근이 가능하다.
(4)캡슐화(Encapsulation)
메소드나 생성자의 일의 내용을 알 필요없이, 그 형태(이름/파라미터/리턴타입)만 알면 호출해서 사용할 수 있는 특성
'프로그래밍 언어 > Java' 카테고리의 다른 글
[JAVA] Calendar class 사용해서 날짜 가져오기 (0) | 2021.05.13 |
---|---|
[JAVA] String class 자주사용하는 메서드 (0) | 2021.05.13 |
[JAVA] 랜덤 숫자 중복제거 쉽게 이해하기! (0) | 2021.05.10 |
[JAVA] 변수정리 #멤버변수? 지역변수? 기본형? 참조형? (0) | 2021.04.22 |
[JAVA] #클래스구조 #멤버변수 #생성자 #메소드 #오버로딩 (0) | 2021.04.14 |