상속이란 ?
- 기존의 클래스로 새로운 클래스를 작성하는 것 (코드의 재사용)
- 두 클래스를 부모와 자식으로 관계를 맺어주는 것
- 자손은 조상의 모든 멤버를 상속 받는다. (생성자 ,초기화블럭은 제외)
- 자손의 멤버가 항상 조상의 멤버보다 같거나 많다.
- 자손의 변경은 조상에 영향을 미치지 않는다.
**class** 자식 클래스 **extends** 부모클래스 {}
class Parent {}
class Child extends Parent{}
class Parent { //부모
int age; //멤버 1개
}
class Child extends Parent {}
//자손 멤버 1개 -> 부모꺼를 물려받았으므로 자신의 멤버가 0개일지라도 상속받은 멤버가 1개이다.
class Parent { //부모
int age; //멤버 1개
}
class Child **extends** Parent {
void play(){
System.out.println("놀자~");
}
자손 클래스에서 새로운 멤버가 추가되도 조상에 영향을 미치지 않는다.
상속멤버1개
자신의 멤버 1개 총 2개인 것이다.
class Point { //2차원 좌표의 한점을 나타내는 클래스 (0,0)
int x;
int y;
}
예제)
public class EX7_1 {
class Tv { //부모멤버 5개
boolean power;
int channel;
void power() { power = !power; }
void channelUp() { ++channel; }
void channelDown() { --channel; }
}
static class SmartTv extends Tv { //자식멤버 2개 + 부모 5개
boolean caption;
void displayCaption(String text) {
if (caption) {
System.out.println(text);
}
}
}
class Ex7_1 {
public static void main(String args[]) {
SmartTv stv = new SmartTv();
stv.channel = 10; // 조상클래스로부터 상속받은 멤버
stv.channelUp(); // 조상클래스로부터 상속받은 멤버
System.out.println(stv.channel);
stv.displayCaption("Hello, World");
stv.caption = true;
stv.displayCaption("Hello, World");
}
}
}
//자식,자손 멤버는 부모에게 영향을 끼치지 않지만 부모멤버의 변동사항은 자식과 자손 멤버에게 영향을 끼친다.
포함관계
포함이란?
- 클래스의 멤버로 참조변수를 선언하는 것
- 작은 단위의 클래스를 만들고 ,이 들을 조합해서 클래스를 만든다.
클래스의 관계 : 1. 상속 2.포함
클래스 간의 관계 결정하기
- 상속 관계 : is-a 관계 a는 b이다.
- 포함 관계 : has-a 관계 a는 b를 가지고 있다.
단일 상속(Single Inheritance)
- 자바는 단일 상속만을 허용한다.
class TvDVD extends Tv, DVD { //에러발생, 조상은 하나만 허용한다. TV, DVD 둘다 상속 X
}
- 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.
class TvDVD extends Tv { //TV 상속
DVD dvd = new DVD(); //DVD 포함
}
예제
class MyPoint{
int x;
int y;
}
//class Circle extends MyPoint{ //상속
// int r;
//
//}
class Circle{ //포함
MyPoint p = new MyPoint(); //참조변수의 초기화
int r;
}
public class InheritanceTest {
public static void main(String[] args) {
Circle c = new Circle(); //객체 생성
c.p.x = 1;
c.p.y = 2;
c.r = 3;
System.out.println("c.p.x="+c.p.x);
System.out.println("c.p.y="+c.p.y;
System.out.println("c.r="+c.r);
}
}
Object 클래스 -모든 클래스의 조상
- 부모가 없는 클래스는 자동적으로 Object 클래스를 상속받게 된다.
- 모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속받는다.
- toString(). equals(), hashCode()
- System.out.println(c.toString()); = System.out.println(c); 같은 문장이다.
class Tv{ -> class Tv extends Object 컴파일러 자동 추가
}
class SmartTv extends Tv{
}
class MyPoint extends Object{
int x;
int y;
}
class Circle extends Object { //object가 최고 조상
MyPoint p;
int r;
Circle(){
p = new MyPoint();
}
}
public class InheritanceTest {
public static void main(String[] args) {
Circle c = new Circle(); //객체 생성
System.out.println(c.toString()); //Circle@7699a589
System.out.println(c); //Circle@7699a589 위와 같은 결과 출력
}
}
출처 : 자바의정석 - 기초편
'Java' 카테고리의 다른 글
[Java] 형변환 (0) | 2023.07.07 |
---|---|
[Java] 참조변수 super (0) | 2023.06.01 |
[Java] 메서드, return문, 반환값 (0) | 2023.05.31 |
[Java] 생성자 this(), 참조변수 this (0) | 2023.05.31 |
[Java] 오버로딩, 오버라이딩 (0) | 2023.05.30 |