계층구조
상하개념
기계는 있는걸로 정의해서 세모밖에 안보이지만 사실은 동그라미, 세모다!
부모개념에 대해서 플러스알파되는 내용이 있어야 함!
부모와 차별화할 수 있는 고유의 무언가가 있어야 생성가능함
1+ 플러스 알파
멤버변수, 메서드 추가
생성자
상속을 개념 상 is-a 라는 관계 성립이 되어야 함
아이유는 가수다 (성립이 되어야 함), 개념 상 같은 맥락에 있어야 함~
에일리는 가수다 (참)
상속의 경우, 둘 다 성립되어야 함
A는 B의 존재를 모름
상속을 해준다는 의미는 없음 상속을 받는다 라고 함!
언어마다 상속의 개념이 조금씩 다름
상속하는 클래스를 부모 클래스(슈퍼클래스) 상속받는 클래스를 자식클래스(서브 클래스)라고 함
extends(확장, 파생) 라는 단어로 상속을 표현함
class B extends A { ← B가 하위클래스, A가 부모클래스
class ElectricCar extends Car {
int batteryLevel;
public void charge(int amount) {
batteryLevel += amount;
}
} // 출처)powerJava
class Car {
int speed;//속도
public void setSpeed(int speed) { // 속도 변경 메소드
this.speed = speed;
}
}
class ElectricCar extends Car {
int battery; // 추가된 필드
public void charge(int amount) { //충전 메소드
battery += amount;
}
}
public class ElectricCarTest {
public static void main(String[] args) {
ElectricCar obj = new ElectricCar(); // 자식클래스 객체 생성
obj.speed = 10;
obj.setSpeed(60); // 부모클래스의 필드와 메소드 사용
obj.charge(10); // 자체 메소드 사용
}
}
자식클래스만으로 무엇을 사용했는지 알 수가 없으니, 부모클래스 안에도 들여다 봐야 함
자식클래스는 부모 클래스와 메소드를 마치 자기 것처럼 사용가능
👨👦어떤게 더 넓은 개념(상위개념)인가? 정보가 더 작은것
관리자와 직원 중 누가 더 상위개념인가? 관리자가 하위개념, 직원이 상위개념
왜 상속을 사용하는가?
태권V
====================
팔
다리
머리
====================
주먹발사()
전자제품 같은 경우 기존의 성능 유지하면서 새로운 기능 추가되는 형식을 나타냄.
API 존재하던 것(클래스)에서 +@ 추가 = 기존+새로운걸 만들어내는 케이스
상속은 2가지 개념으로 나뉘어짐
상속은 관계가 반방향(한쪽만 알고있음)임
a가 변경할때 b(하위클래스)에 대해 고려를 하지않음
a가 변경하면 b(하위클래스)도 변경됨. 잘못하면 오류가 날 수도 있음, 의존성이 多
유지,보수가 쉽다고는 하는데 어느면에서는 좋지않음.
▶ 위의 표는 성립되지않음
자바에서는 다중상속을 지원하지 않음 (부모는 무조건 하나!)
class Zealot extends Object
질럿은 객체다
모든 Object는 toString 문자열로 변경가능
Animal 클래스와 Dog 클래스 만들어보기
class Animal {
int age;
void eat() {
System.out.println("먹고 있음...");
}
}
class Dog extends Animal {
void bark() {
System.out.println("짖고 있음...");
}
}
public class DogTest {
public static void main(String[] args) {
Dog d = new Dog();
d.bark();
d.eat();
}
}
일반적인 도형을 나타내는 shape 클래스를 작성하고 이것을 상속받아서 원을 나타내는 Circle 클래스를 작성해 보자.
class shape {
int x, y;
}
class Circle extends shape {
int radius;
public Circle(int radius) { //생성자, shape 상속 받음
this.radius = radius;
x = 0;
y = 0;
}
double getArea() {
return 3.14 * radius * radius;
}
}
public class CircleTest {
public static void main(String[] args) {
Circle obj = new Circle(10);
System.out.println("원의 중심: (" + obj.x + "," + obj.y + ")");
System.out.println("원의 면적: " + obj.getArea());
}
}
상속의 장점은? 중복되는걸 없앨 수 있다, 관리,수정이 용이
상속 계층도의 최상위 층에는 어떤 클래스가 있는가? object
private 붙은건 상속불가
protected(#) 상속받으면 사용가능, 동일 패키지도 사용가능
kr.ac.yellow
Father
~age:int
↑ 패키지 정보(주소)가 서로 다르면 쓸 수 없다
kr.arg.red
Son
class Parent {
public Parent(int age) { // 부모는 자식의 존재를 모름
System.out.println("Parent");
}
}
class Child extends Parent {
public Child() {
super(1); // 부모의 생성자, 생성자 첫번째 연산으로 써야 함, this는 안씀 상속관계에 묶여있기 때문
System.out.println("Child");
}
}
class Ex1 {
public static void main(String[] args) {
Child c = new Child();
}
}
super()를 호출하면 부모클래스의 생성자가 호출됨
class Some {
private int num;
public Some(int num) {
this.num = num;
}
public String toString() {
return "num : " + num;
}
}
class Other extends Some {
public Other(int num) {
super(num);
}
}
class Another extends Some {
public Another() {
super(10);
}
}
class Ex2 {
public static void main(String[] args) {
System.out.println(new Other(100));
System.out.println(new Another());
}
}
값이 이렇게 나온다~
학원 수업내용을 바탕으로 작성한 글입니다
수업자료는 powerJava를 사용했습니다