-> ๊ธฐ์กด ํด๋์ค๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ์๋ก์ด ํด๋์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค.
ํํ
class Parent{ } class Child **extends Parent** { //.. }
Parent : ์กฐ์ ํด๋์ค
Child : ์์ ํด๋์ค
class Parent{
int age;
}
class Child **extends Parent** {
void play() { }
}
<์์>
- ์์ ํด๋์ค๋ ์กฐ์ ํด๋์ค์ ๋ชจ๋ ๋ฉค๋ฒ๋ฅผ ์์๋ฐ๋๋ค.
(๋จ, ์์ฑ์์ ์ด๊ธฐํ ๋ธ๋ญ์ ์์๋์ง ์๋๋ค.)- ์์ ํด๋์ค์ ๋งด๋ฒ ๊ฐ์๋ ์กฐ์ ํด๋์ค๋ณด๋ค ํญ์ ๊ฐ๊ฑฐ๋ ๋ง๋ค.
ํด๋์ค ๋ด ๋ณ์๋ก ๋ค๋ฅธ ํด๋์ค๋ฅผ ํฌํจ์ํค๋ ๊ฒ์ ์๋ฏธ
class Circle {
Point c = new Point();
//Circle ํด๋์ค๊ฐ Point ํด๋์ค compositeํจ
int r;
}
์์ vs ํฌํจ
์์: ํฐ ๋ถ๋ฅ ์์ ํฌํจ๋ ์์์ด๋ฉด ์์์ ์ด์ฉ
ex) ์ค๋งํธ ํฐ๋น๋ ํฐ๋น๋ค. (~์ ~์ด๋ค.)
ํฌํจ: ํด๋์ค์ ๊ตฌ์ฑ ์์๋ก ๋ค๋ฅธ ํด๋์ค๊ฐ ํฌํจ๋๋ฉด ์ด์ฉ
ex) ์์ ์ ์ ๊ฐ์ง๊ณ ์๋ค. (~์ ~์ ๊ฐ์ง๊ณ ์๋ค.)
C++์ ๊ฒฝ์ฐ ๋ค์ค ์์ ๊ฐ๋ฅ
- ํ๋, ์กฐ์ ํด๋์ค์ ๋งค์๋ ์ด๋ฆ ์ค๋ณต ๋๋ ํด๋์ค๊ฐ ๊ด๊ณ ๋ณต์ก์ฑ ๋ฑ์ ์ํด
JAVA๋ ๋จ์ผ ์์์ ๋จ์ ์ ๊ฐ์ํ๊ณ ๋จ์ผ ์์๋ง์ด ๊ฐ๋ฅํจ!!!
class Tv{
//...
}
class Tv extend Object{
//...
}
ํด๋์ค๋ฅผ ์์ ๋ฐ์์ ๋,
์กฐ์ ํด๋์ค์ ๋งค์๋๋ฅผ ์์ ํ๊ณ ์ถ๋ค๋ฉด,
์์ ํด๋์ค ๋ด๋ถ์์ ๋์ผํ ์ด๋ฆ์ผ๋ก ๋งค์๋๋ฅผ ๋ง๋ค์ด์ ์์ ์ํจ๋ค.
์ด๋! overriding์ด ๊ฐ๋ฅํ ์กฐ๊ฑด์ด์๋ค.
- ์กฐ์ ํด๋์ค ๋งค์๋์ ์ด๋ฆ / ๋งค๊ฐ๋ณ์ / ๋ฐํํ์ ๋ชจ๋ ๋์ผํด์ผ ๋จ
- ์ ๊ทผ ์ ์ด์๋ ์กฐ์ ํด๋์ค์ ๋งค์๋๋ณด๋ค ์ข์ ๋ฒ์๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
public > protected > (default) > private(๊ฐ์ฅ ์ข์)- ์กฐ์ ํด๋์ค์ ๋งค์๋๋ณด๋ค ๋ง์ ์์ ์์ธ ์ ์ธํ ์ ์๋ค.
overloading | overriding |
---|---|
์ด๋ฆ ๊ฐ๊ณ , ๋งค๊ฐ๋ณ์ ๋ค๋ฆ(new method) | ์ด๋ฆ ๊ฐ๊ฒ ์์ ํด๋์ค์์ ๋ฎ์ด์(modify) |
์กฐ์๊ณผ ์์์ ๋ณ์๋ช ์ด ๊ฐ์ ๋, ์กฐ์์ ํด๋์ค๋ฅผ super๋ก ํ๊ธฐ
this | super |
---|---|
ํด๋์ค ๋ด ๋ณ์์ ์ง์ญ๋ณ์๊ฐ ๋์ผ์ด๋ฆ ๊ตฌ๋ถ | ์กฐ์ ๋ณ์์ ์์ ๋ณ์๊ฐ ๋์ผ ์ด๋ฆ ๊ตฌ๋ถ |
class Ex7_2 {
public static void main(String args[]) {
Child c = new Child();
c.method();
}
}
class Parent { int x=10; }
class Child extends Parent {
int x=20;
void method() {
System.out.println("x=" + x);
System.out.println("this.x=" + x);
// this.x๋ก ํ์ํ๋ฉด ๋ ์ ํํจ!!
System.out.println("super.x="+ super.x);
}
}
this()
๊ฐ์ ํด๋์ค์ ์ค๋ฒ๋ก๋ฉ๋ ๋ค๋ฅธ ์์ฑ์ ํธ์ถํ ๋ ์ฌ์ฉ
super()
์กฐ์ ํด๋์ค์ ์์ฑ์ ํธ์ถ์ ์ฌ์ฉ
ํด๋์ค์ ์์์๋ ์์ฑ์, ์ด๊ธฐํ ๋ธ๋ญ์ ์์๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
public class Ex7_4 {
public static void main(String[] args) {
Point3D p = new Point3D(1, 2, 3);
System.out.println("x=" + p.x + ",y=" + p.y + ",z=" + p.z);
}
}
class Point {
int x, y;
Point(int x, int y) { //์กฐ์ ํด๋์ค ์์ฑ์ฅ
this.x = x;
this.y = y;
}
}
class Point3D extends Point {
int z;
Point3D(int x, int y, int z) {
super(x, y); // Point(int x, int y) ์์ฑ์ ํธ์ถ
this.z = z;
}
}
ํจ์บ์ง๋ ํด๋์ค์ ๋ฌถ์
ํด๋์ค๋ ์ด๋ฆ์ด ๊ฐ๋๋ผ๋ ํจํค์ง๊ฐ ๋ค๋ฅด๋ฉด ๋ค๋ฅด๊ฒ ์ฌ์ฉ๊ฐ๋ฅํจ
๋ฐ๋ผ์, ์์
์๊ฐ ๋์ผ ํด๋์ค๋ช
์ ์ถฉ๋์ ๋ง๊ธฐ ์ํด์ ํจํค์ง๋ฅผ ์ฌ์ฉํจ
ex)
java.lang.String
java ํจํค์ง > lang ํจํค์ง > String.class ํด๋์ค
ํด๋์ค๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ํ๋์ ํด๋์ค ํ์ผ(.class)์ธ ๊ฒ๊ณผ ๊ฐ์ด ํจํค์ง๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ํ๋์ ๋๋ ํ ๋ฆฌ(directory)์ด๋ค.
๋ฐ๋์! ์์คํ์ผ ์ฃผ์๊ณผ ๊ณต๋ฐฑ์ ์ ์ธํ ์ฒซ ๋ฒ์จฐ ๋ฌธ์ฅ์ด์ฌ์ผ ํจ
package com.codechobo.book;
public class PackageTest {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
console ํธ์ถ์ ๋ณด๋ฉด ํ์คํ ๊ด๊ณ ํ์ธ ๊ฐ๋ฅ
- JVM์ ํจํค์ง๊ฐ ํฌํจ๋ ๋ฃจํธ path๊ฐ classpath์ ์ถ๊ฐ๋์ด ์์ด์ผ ํจํค์ง๋ฅผ ์ฐพ์ ์ ์๋ค.
- ์ด๋
.;C:\jdk1.8\work
๋ฅผ CLASSPATH ์์คํ ํ๊ฒฝ๋ณ์์ ์ถ๊ฐ์ํค๋๋ฐ,
.;์ ํ์ฌ ๋๋ ํ ๋ฆฌ๋ ํด๋์คํจ์ค์ ํฌํจ์ํค๊ธฐ ์ํด์์ด๋ค.
import ํจํค์ง๋ช
.ํด๋์ค๋ช
;
or
import ํจํค์ง๋ช
.*
์ด๋ *๋ก ํจํค์ง ๋ด ๋ชจ๋ class๋ฅผ ํฌํจ์ํค๋ฉด,
์ปดํ์ผ๋ฌ๋ linking์์ ์๊ฐ์ด ๊ฑธ๋ฆด์ง ๋ชฐ๋ผ๋ ์คํํ์ผ์์๋ ์ฑ๋ฅ์ฐจ์ด๋ ์๋ค.
??Classpath๋ import ๊ด๊ณ๊ฐ ์์ง ์ ํํ์ง ์๋ค.
์ ํํ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ํด๋์ค์ ํจํค์ง๋ฅผ ๋ง๋ค์๋ค๋ฉด
๊ทธ ํจํค์ง์ ์์ ๋ฃจํธ๋ฅผ classpath์ ์ถ๊ฐ์์ผ์ผ JVM์์ ํด๋์ค๋ฅผ ํ์ฉํ ์ ์๋ค.
์ข์ ๊ธ ๊ฐ์ฌํฉ๋๋ค!