package ex01상속기초;
public class Child extends Parent {
// 자식클래스, 서브클래스(새로운 클래스)
// extends : 상속을 받을 때 사용하는 키워드
// --> 연장하다, 확장하다의 의미를 가지고 있음
// class 서브클래스 extends 슈퍼클래스
public void makeBong() {
System.out.println("맛있는 봉골레 파스타를 만든다~ 얍!");
}
public void makeSteak() {
System.out.println("버터에 아스파라거스를 추가해서 스테이크를 굽는다");
}
/*
* @author SMHRD(만든사람 이름)
* @since 23.07.12
* @param 매개변수에 대한 설명 달아주는 곳
* @return 반환값에 대한 설명 달아주는 곳
*/
@Override // annotation --> 개발자들끼리 소통할 때 사용하는 주석
public void makeAlio() {
// TODO Auto-generated method stub
super.makeAlio();
// super --> Parents 클래스 호출
// . --> 가지고 있는
// makeAliio() --> 메소드를 그대로 호출할거야
// 바로 밑에 있는 거에 달림
}
// 메소드 오버로딩 == 중복정의
// 메소드 오버라이딩 == 재정의
// : 상속이 전제되었을 때, 부모클래스가 가지고 있는 메소드를 그대로 가지고 와서
// (리턴타입, 메소드명, 매개변수 등) {} 안쪽에 있는 로직만 다시 정의하는 기법
// public Child() {
// super(); // --> 부모클래스의 생성자 호출
// }
}
package ex01상속기초;
import ex02닌텐도게임기.GameChip;
public class Main {
// GameChip gc = new GameChip();
// 추상메서드가 있으면 JVM은 생성 후 실행시 어떤 로직을 수행해야 하는지 모름, 그래서 생성 못하게 막음
public static void main(String[] args) {
// 실행하는 공간
Child c = new Child();
c.makeSteak();
c.makeAlio();
// 자식클래스가 부모클래스의 메소드를 오버라이딩한 경우
// 오버라이딩한 메소드가 호출된다.
// ★ *(자바에서) 상속의 특징
// 1. 다중상속을 지원하지 않는다.
// : 하나의 클래스는 하나의 부모 클래스만 가질 수 있다.
// 2. 상속의 횟수에 제한을 두지 않는다.
// --> 하나의 클래스는 부모클래스가 될 수도 있고, 자식클래스가 될 수도 있다.
// --> 부모클래스는 여러개의 자식클래스를 가질 수 있다.
// 3. 모든 클래스는 java.lang.Object(최상위클래스)를 상속받는다.
// 객체의 형변환(Casting)
// 1. 기본자료형의 형변환은 데이터의 크기를 기준으로 자동 vs 강제 형변환 결정
// ---> boolean, int, char, long, double, float, short, byte
// double num = 4; --> 자동 형변환
// why? double -> 8byte / int -> 4byte
// int num = (int) 3.14; --> 강제 형변환
// 2. 레퍼런스 타입의 자료형
// : 객체 내 필드, 메소드의 접근권한을 기준으로 강제 vs 자동 형변환 결정
// 상속이 전제되어있을 때, 객체의 형변환 가능
// (1) 자동형변환(업캐스팅)
// : 자식클래스가 부모클래스 자료형으로 자동으로 형변환 하는 것을 업캐스팅이라고 부른다.
// ex) 동물 --> 고양이 클래스가 상속
// --> 고양이는 동물이다! (말이 됨.)
Parent p = new Child() ;
p.makeSteak();
// --> 업캐스팅 되었을 때, 자식클래스(서브클래스, 하위클래스)가 부모클래스(슈퍼, 상위)의
// 메소드를 오버라이딩 한 경우에는, 자식클래스의 메소드가 호출된다.
// new child()는 자료형이 child도 될 수 있고 parent도,
// object도 될 수 있다. (다형성)
// (2) 강제형변환(다운캐스팅)
// : 부모클래스가 자식클래스 강제 형변환
// >> ★ 다운캐스팅의 정식 정의 >> 업캐스팅된 객체를 다시 본래 자신의 형태로 강제적으로 되돌리는 것
// Child ch = (Child) new Parent();
// 코드를 작성하다가 빨간줄이 떠요 --> (구문 오류)
// 코드에는 문제가 없는데, 실행했을 때 문제상황 발생 --> Exception(예외상황)
// 구문에는 문제가 없지만, JVM이 코드를 해석하는 순간 예외가 발생
Child ch = (Child)p;
ch.makeBong();
// 다형성 : p라는애 parent 였는데 child로 바뀔수있네
}
}
package ex01상속기초;
public class Parent {
// 부모클래스, 슈퍼클래스(기존 클래스)
// 스테이크 만든다.
public void makeSteak() {
System.out.println("맛있는 스테이크를 굽는다. 취익취익~");
}
// 알리오올리오 만든다.
public void makeAlio() {
System.out.println("알리오올리오 파스타 만들기!!!!");
}
}
public static void main(String[] args) {
// 기존클래스의 변수 (데이터)와 메소드(로직,코드)를 물려받아 새로운 클래스를 구성하는 것.
// 기존 클래스 = 부모 클래식 = 슈퍼 클래스
// 자식클래스 = 서브클래스
// 재사용 + 추가사용 가능
// 기존 클래스의 변수와 코드를 재사용
// 먼저 작성된 검증된 프로그램을 재사용
// 클래스간 계층적 분류 및 관리
// 유지보수 용이
// * 상속의 특징
// - 다중 상속이 지원되지 않는다.
// - 상속의 횟수에 제한을 두지는 않는다.
// - 모든 클래스는 Object(최상위클래스) 상속받는다.
// 메소드 오버라이딩
// : 상속이 전제되어 있는 상태에서, 자식클래스(하위,서브클래스)가 부모클래스(슈퍼,상위)가 가지고 있는 메소드를 그대로
// 가지고와서 중괄호{} 안쪽에 있는 로직만 재정의하는 메소드 선언기법
// 오버로딩 중복정의 / 오버라이딩 재정의
// 객체 형변환 --> 상속이 전제
// 1) 업캐스팅
// : 자식클래스가 부모클래스로 자동 형변환(필드와 메서드 접근권한이 기준)
// 2) 다운캐스팅
// : 업캐스팅된 객체를 다시 본래의 자료형으로 강제로 되돌리는 것
// * 형변환 --> 그림 그리면서 공부 *
}
'Java' 카테고리의 다른 글
(자바) 접근제한자, 필드와 메서드 (0) | 2024.04.21 |
---|---|
(자바) 메서드 오버라이딩 (0) | 2024.04.21 |
(자바) Collection과 ArrayList 어레이 리스트 정리 (feat.제네릭 기법) (0) | 2024.04.19 |
(자바) 객체 배열 2 (0) | 2024.04.19 |
(자바) 객체 배열 Main (0) | 2024.04.19 |
package ex01상속기초; public class Child extends Parent { // 자식클래스, 서브클래스(새로운 클래스) // extends : 상속을 받을 때 사용하는 키워드 // --> 연장하다, 확장하다의 의미를 가지고 있음 // class 서브클래스 extends 슈퍼클래스 public void makeBong() { System.out.println("맛있는 봉골레 파스타를 만든다~ 얍!"); } public void makeSteak() { System.out.println("버터에 아스파라거스를 추가해서 스테이크를 굽는다"); } /* * @author SMHRD(만든사람 이름) * @since 23.07.12 * @param 매개변수에 대한 설명 달아주는 곳 * @return 반환값에 대한 설명 달아주는 곳 */ @Override // annotation --> 개발자들끼리 소통할 때 사용하는 주석 public void makeAlio() { // TODO Auto-generated method stub super.makeAlio(); // super --> Parents 클래스 호출 // . --> 가지고 있는 // makeAliio() --> 메소드를 그대로 호출할거야 // 바로 밑에 있는 거에 달림 } // 메소드 오버로딩 == 중복정의 // 메소드 오버라이딩 == 재정의 // : 상속이 전제되었을 때, 부모클래스가 가지고 있는 메소드를 그대로 가지고 와서 // (리턴타입, 메소드명, 매개변수 등) {} 안쪽에 있는 로직만 다시 정의하는 기법 // public Child() { // super(); // --> 부모클래스의 생성자 호출 // } }
package ex01상속기초; import ex02닌텐도게임기.GameChip; public class Main { // GameChip gc = new GameChip(); // 추상메서드가 있으면 JVM은 생성 후 실행시 어떤 로직을 수행해야 하는지 모름, 그래서 생성 못하게 막음 public static void main(String[] args) { // 실행하는 공간 Child c = new Child(); c.makeSteak(); c.makeAlio(); // 자식클래스가 부모클래스의 메소드를 오버라이딩한 경우 // 오버라이딩한 메소드가 호출된다. // ★ *(자바에서) 상속의 특징 // 1. 다중상속을 지원하지 않는다. // : 하나의 클래스는 하나의 부모 클래스만 가질 수 있다. // 2. 상속의 횟수에 제한을 두지 않는다. // --> 하나의 클래스는 부모클래스가 될 수도 있고, 자식클래스가 될 수도 있다. // --> 부모클래스는 여러개의 자식클래스를 가질 수 있다. // 3. 모든 클래스는 java.lang.Object(최상위클래스)를 상속받는다. // 객체의 형변환(Casting) // 1. 기본자료형의 형변환은 데이터의 크기를 기준으로 자동 vs 강제 형변환 결정 // ---> boolean, int, char, long, double, float, short, byte // double num = 4; --> 자동 형변환 // why? double -> 8byte / int -> 4byte // int num = (int) 3.14; --> 강제 형변환 // 2. 레퍼런스 타입의 자료형 // : 객체 내 필드, 메소드의 접근권한을 기준으로 강제 vs 자동 형변환 결정 // 상속이 전제되어있을 때, 객체의 형변환 가능 // (1) 자동형변환(업캐스팅) // : 자식클래스가 부모클래스 자료형으로 자동으로 형변환 하는 것을 업캐스팅이라고 부른다. // ex) 동물 --> 고양이 클래스가 상속 // --> 고양이는 동물이다! (말이 됨.) Parent p = new Child() ; p.makeSteak(); // --> 업캐스팅 되었을 때, 자식클래스(서브클래스, 하위클래스)가 부모클래스(슈퍼, 상위)의 // 메소드를 오버라이딩 한 경우에는, 자식클래스의 메소드가 호출된다. // new child()는 자료형이 child도 될 수 있고 parent도, // object도 될 수 있다. (다형성) // (2) 강제형변환(다운캐스팅) // : 부모클래스가 자식클래스 강제 형변환 // >> ★ 다운캐스팅의 정식 정의 >> 업캐스팅된 객체를 다시 본래 자신의 형태로 강제적으로 되돌리는 것 // Child ch = (Child) new Parent(); // 코드를 작성하다가 빨간줄이 떠요 --> (구문 오류) // 코드에는 문제가 없는데, 실행했을 때 문제상황 발생 --> Exception(예외상황) // 구문에는 문제가 없지만, JVM이 코드를 해석하는 순간 예외가 발생 Child ch = (Child)p; ch.makeBong(); // 다형성 : p라는애 parent 였는데 child로 바뀔수있네 } }
package ex01상속기초; public class Parent { // 부모클래스, 슈퍼클래스(기존 클래스) // 스테이크 만든다. public void makeSteak() { System.out.println("맛있는 스테이크를 굽는다. 취익취익~"); } // 알리오올리오 만든다. public void makeAlio() { System.out.println("알리오올리오 파스타 만들기!!!!"); } }
public static void main(String[] args) { // 기존클래스의 변수 (데이터)와 메소드(로직,코드)를 물려받아 새로운 클래스를 구성하는 것. // 기존 클래스 = 부모 클래식 = 슈퍼 클래스 // 자식클래스 = 서브클래스 // 재사용 + 추가사용 가능 // 기존 클래스의 변수와 코드를 재사용 // 먼저 작성된 검증된 프로그램을 재사용 // 클래스간 계층적 분류 및 관리 // 유지보수 용이 // * 상속의 특징 // - 다중 상속이 지원되지 않는다. // - 상속의 횟수에 제한을 두지는 않는다. // - 모든 클래스는 Object(최상위클래스) 상속받는다. // 메소드 오버라이딩 // : 상속이 전제되어 있는 상태에서, 자식클래스(하위,서브클래스)가 부모클래스(슈퍼,상위)가 가지고 있는 메소드를 그대로 // 가지고와서 중괄호{} 안쪽에 있는 로직만 재정의하는 메소드 선언기법 // 오버로딩 중복정의 / 오버라이딩 재정의 // 객체 형변환 --> 상속이 전제 // 1) 업캐스팅 // : 자식클래스가 부모클래스로 자동 형변환(필드와 메서드 접근권한이 기준) // 2) 다운캐스팅 // : 업캐스팅된 객체를 다시 본래의 자료형으로 강제로 되돌리는 것 // * 형변환 --> 그림 그리면서 공부 * }
'Java' 카테고리의 다른 글
(자바) 접근제한자, 필드와 메서드 (0) | 2024.04.21 |
---|---|
(자바) 메서드 오버라이딩 (0) | 2024.04.21 |
(자바) Collection과 ArrayList 어레이 리스트 정리 (feat.제네릭 기법) (0) | 2024.04.19 |
(자바) 객체 배열 2 (0) | 2024.04.19 |
(자바) 객체 배열 Main (0) | 2024.04.19 |