10/24 수업 : 상속과 생성자👩👶

리무 rimu ·2022년 10월 24일
1

Java

목록 보기
7/35
post-thumbnail

📌상속

계층구조
상하개념

기계는 있는걸로 정의해서 세모밖에 안보이지만 사실은 동그라미, 세모다!
부모개념에 대해서 플러스알파되는 내용이 있어야 함!
부모와 차별화할 수 있는 고유의 무언가가 있어야 생성가능함

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를 사용했습니다

profile
JAVA / SQL / Spring 을 공부하고 있습니다 🐥

0개의 댓글