728x90
반응형
SMALL
생성자(캡슐화, 추상화, 다형성)
- 객체가 생성되는 순간(new키워드) 실행
- 메소드 -> 오버로딩(중복된 메서드이름 서로다르게 입력받는 파라미터값)
- 반환타입을 지정할 수 없다
- 클래스의 이름과 같아야한다
- 생성자를 사용 안하면 디폴트이 자동으로 입력된다.
상속
class 서브클래스 extends 슈퍼클래스
- 기존 클래스의 변수와 코드 재사용
- 검증된 코드임
- 다중상속을 지원하지 않는다(부모를 여러명 갖는것x)
- 상속의 횟수에 제한을 두지 않는다(부모->자식->자식1)
- 모든 클래스는 java.lang.class를 상속받는다
부모클래스
package Inherence;
public class Maple { //부모클래스
//슈퍼클래스,부모클래스
// 1. 필드
// HP, MP, name
private int hp;
private int mp;
private String name;
// 2. 생성자
// 위의 세 개의 필드를 전부 채워주기
public Maple(int hp, int mp, String name) { //alt+shift+s
super();
this.hp = hp;
this.mp = mp;
this.name = name;
}
// 3. 메소드
// 앞으로 가기, 뒤로가기, 점프하기, 공격하기
public void go() {
System.out.println(name+" 앞으로 간다");
}
public void back() {
System.out.println(name+" 뒤로간다");
}
public void jump() {
System.out.println(name+" 점프점프!");
}
public void attack() {
System.out.println(name+" 공격하기!!");
}
public void show() {
System.out.println("현재HP"+hp);
System.out.println("현재MP"+mp);
System.out.println("이름"+name);
}
}
자식클래스
package Inherence;
public class Dodo extends Maple {//Maple의 자식클래스
//Maple 슈퍼클래스를 상속받는 서브클래스/자식클래스
//extends
// 부모클래스가 디폴트생성자가 아닌 다른 생성자를 갖는다면
// 반드시 그 생성자를 만들어줘야한다.
public Dodo(int hp, int mp, String name) {
super(hp, mp, name); //부모클래스도 정보를 보내고있음
}
public void skill() {
System.out.println("엑스칼리버!!!");
}
//메소드 오버라이딩 --->재정의
//attack()--->오버라이딩
@Override //어노테이션
public void attack() {
System.out.println("필살기를 시전한다!");
}
}
Main 문
package Inherence;
public class MapleMain{
public static void main(String[] args) {
//
Maple dodo=new Maple(100,100,"기본캐릭터"); //부모클래스
dodo.go();
dodo.attack();
Dodo hyper=new Dodo(200,100,"카이저"); //자식클래스
hyper.attack(); //상속을 받으면 부모클래스가 가지고 있는 기능들을 전부 사용할 수 있다.
hyper.skill();
}
}
Casting(캐스팅)
기존 데이터 타입을 다른 데이터 타입으로 변환하는것
Upcasting
하위 클래스(고양이)가 상위 클래스(동물) 타입으로 자동 타입 변환하는것(다형성)
ex)고양이는 동물이다
- 객체 내 모든 변수, 메소드에 접근x
- 상위 클래스의 변수메소드에만 접근가능
- 하위클래스가 상위클래스의 메소드를 오버라이딩한 경우 하위클래스에서 사용가능
부모 변수=new 자식();
자식.메서드();
부모와 자식에서의 공동으로 존재하는 메서드(파란색) 중에서 자식내의 오버라이드 된 메서드(파란색)를 사용한다.
자식클래스에는 존재하나 부모에서는 존재치 않는 메서드는 호출되지 않는다
Parent pr=new Parent(); //부모
Child cd=new Child(); //자식
Parent pr2=new Child(); 업캐스팅된것이며 부모변수이나 몸체는 자식을 갖고있다.
부모메서드
public void jjajang() {
System.out.println("짜장면을 만든다");
}
부모메서드의 기능을 재정의한 자식메서드
@Override
public void jjajang() {
//부모클래스를 의미하는 키워드이다
System.out.println("돼지고기를 듬뿍넣은 업그레이드 짜장면을 만든다");
}
cd.jjajang();
[출력문]: 짜장면을 만든다
pr2.jjajang();
[출력문]:돼지고기를 듬뿍넣은 업그레이드 짜장면을 만든다
다시 정리하면
부모의 jjajang 기능과 자식의 jjajang기능을 동시에 사용하기 하는 업캐스팅 을 통한 다형성 을 이용하면 부모의기능 자식의 기능 둘다 사용 가능하다
DownCasting
업캐스팅 된 객체들만 적용됨
해당 그림에서 빨간색 부분으로 부모한테는 없는 자식에서만 구현된 메서드를 사용하기 위해
다운 캐스팅을 사용한다
아랫쪽에 코딩문을 따로 표시해뒀지만
Parent pr2=new Child(); 업 캐스팅된 pr2
다시 말해 변수는 부모이나 자식의 몸체를 갖고있는 pr2를 대상으로
Child cd2=(Child)pr2 다운캐스팅을 진행 하면 빨간색 메서드 를 사용할 수 있다
해당 빨간색메서드로서 부모한테는 존재하지 않는 자식한테만 존재하는 메서드이다.
public void bbok() {
System.out.println("볶음밥을 만든다");
}
[명령문]: cd2.bbok();
[출력문]: 볶음밥을 만든다
bbok() 메서드 자체는 부모클래스에 구현되있지 않으나 다운캐스팅으로 인해 출력할수있음을 확인할수있다.
ex
부모클래스
package Inherence;
public class Parent {
//부모님이 하고계시는 중국집
public void jjajang() {
System.out.println("짜장면을 만든다");
}
public void tangsu6() {
System.out.println("탕수육을 만든다");
}
}
자식클래스
package Inherence;
public class Child extends Parent { //자식은 3가지의 기능을 쓸쑤있다. why? 재정의한 짜장면 기능을 쓰지 부모의 짜장기능은 못쓴다
public void bbok() {
System.out.println("볶음밥을 만든다");
}
@Override
public void jjajang() {
//부모클래스를 의미하는 키워드이다
System.out.println("돼지고기를 듬뿍넣은 업그레이드 짜장면을 만든다");
}
}
Main
package Inherence;
public class ChineseMain {
public static void main(String[] args) {
Parent pr=new Parent();
Child cd=new Child();
//업캐스팅(UpCasting)-->암묵적 형변환
//Parent가 필요한 메소드와 필드를 Child가 전부 가지고 있기 때문에
//래퍼런스 변수는 부모= 몸체 자식
Parent pr2=new Child();
pr.tangsu6();
cd.tangsu6();
pr.jjajang();
cd.jjajang();
//몸체를 Child 를 만들어줬기 때문에 Child가 가진 jjajang기능 사용
pr2.jjajang();
//pr2.bbok();//이건 불가능-->부모가 가지고있는 기능이 아니기 때문에
// 2. 다운캐스팅
// 사전조건 : 업캐스팅 된 객체를 대상으로만 다운캐스팅 진행
//Child cd2=(Child)new Parent(); //-->컴파일시 에러뜬다. Child에 Parent에 없는 bbok() 메서드가 있기때문에 변환x
Child cd2=(Child)pr2;
cd2.bbok();
}
}
728x90
반응형
LIST
'Language > 자바' 카테고리의 다른 글
[자바]접근제한자 & 추상화(클래스,메서드) (0) | 2021.01.11 |
---|---|
[JDBC]이클립스 JDBC연동 (0) | 2021.01.11 |
자바 jdk 환경변수 설정 (0) | 2021.01.10 |
[자바] enum 이란? (0) | 2021.01.01 |
Tomcat 환경세팅 (0) | 2020.12.18 |