: ๋ถ๋ชจ class๊ฐ ๊ฐ์ง๋ ๋ด์ฉ์ ํ์ฅํด์ ์์ class๋ฅผ ๋ง๋๋ ๋ฐฉ์
ex) ํ์ฌ ์์คํ
Class - Teacher, Student, Staff => ๊ณตํต์ผ๋ก ๊ฐ์ง๊ณ ์๋ field, method๊ฐ ์กด์ฌํ๋ค.
์ฝ๋์ ์ค๋ณต์ด ๋ฐ์ํ๋ค. ์ฌ๊ธฐ์์ ๊ณตํต์ผ๋ก ์ถ๊ฐํด์ผ ํ๋ ๊ฒ์ด ์๊ธฐ๋ฉด ๊ฐ์ ์ถ๊ฐํด์ผ ํ๋ค.
class Student {
String name; // ์ด๋ฆ
String mobile; // ์ ํ๋ฒํธ
String dept; // ํ๊ณผ
}
class Teacher {
String name; // ์ด๋ฆ
String mobile; // ์ ํ๋ฒํธ
String subject; // ๊ณผ๋ชฉ
}
class Staff {
String name; // ์ด๋ฆ
String mobile; // ์ ํ๋ฒํธ
int salary; // ์๊ธ
}
์์์ผ๋ก ํด๊ฒฐํ๋ค.
class Person {
String name; // ์ด๋ฆ
String mobile; // ์ ํ๋ฒํธ
}
// tightly coupled
class Student extends Person{
String dept; // ํ๊ณผ
}
class Teacher extends Person{
String subject; // ๊ณผ๋ชฉ
}
class Staff extends Person{
int salary; // ์๊ธ
}
extends keyword๋ก ์์์ ๊ตฌํํ๋ค.
Java๋ ๋จ์ผ ์์๋ง ์ง์ํ๋ค. ๋ค์ค ์์์ ์ง์ํ์ง ์๋๋ค.
: extends ๋ค์ ์ฌ๋ฌ class๊ฐ ์ฌ ์ ์๋ค.
class Human {
String name;
}
class Person {
String name; // ์ด๋ฆ
String mobile; // ์ ํ๋ฒํธ
}
class Student extends Person, Human{ // ์ค๋ฅ ๋ฐ์
String dept; // ํ๊ณผ
}
: constructor๋ ์์๋์ง ์๋๋ค.
: private access modifier๋ก ์ง์ ๋ field, method๋ ์์๋์ง ์๋๋ค.
instance๋ ๋ฌด์กฐ๊ฑด Heap์ ์์ฑ๋๋ค.
class Person {
String name; // ์ด๋ฆ
String mobile; // ์ ํ๋ฒํธ
}
class Student extends Person {
String dept;
}
public class Main {
public static void main(String[] args) {
Student s = new Student();
// is-a relationship
// subclass is a superclass
// Person s = new Student();
// subclass ํ์
์ ์จ์ผ ํ ๊ณณ์ superclass ํ์
์ ์ธ ์ ์๋ค.
// ์ด๋๋ s๊ฐ Student๋ฅผ ๊ฐ๋ฆฌํค์ง ์๊ณ , ์์ Person์ ๊ฐ๋ฆฌํจ๋ค.
// Object s = new Student();
// ์ด๋๋ Person ์์ Object๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
// => Polymorphism(๋คํ์ฑ)
}
}
์์ ๊ฐ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด Person์ ์์ ๋ฐ์์ name, mobile, dept๊ฐ Student ๊ฐ์ฒด์ ๋ด๊ฒจ์ ์๊ธธ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์๋๋ค.
=> ์ค์ ์์์์ Instance ์์ฑ ๋ฐฉ๋ฒ
: ์์ ๊ฐ์ฒด๋ฅผ ๋จผ์ ๋ง๋ค๊ณ , ๊ทธ๋ฅผ ๊ฐ์ธ๋ ํ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๊ฐ๋ ๋ฐฉ์์ผ๋ก ๋ง๋ ๋ค.
Java์ ๋ชจ๋ class๋ ๋ฌด์กฐ๊ฑด Object class๋ฅผ ์์ํ๊ณ ์๋ค.
Java์ ๋ชจ๋ class๋ ํน์ package ์์ ํฌํจ๋์ด ์๋ค.
-> Object class๋ Java.lang.Object
: ํ์ ํด๋์ค์์ ์์ ํด๋์ค์ ์๋ ๊ฒ์ ์ฌ์ ์ ํ๋ค.
class Person {
String name; // ์ด๋ฆ
String mobile; // ์ ํ๋ฒํธ
public void printAll() {
System.out.println("๋ชจ๋ ์ถ๋ ฅ!");
}
}
class Student extends Person {
String name; // ์ผ๋ฐ์ ์ด์ง ์๋ค.
String dept;
public void printAll() {
System.out.println("์ค๋ฒ๋ผ์ด๋ฉ!");
}
}
public class Main {
public static void main(String[] args) {
Student s = new Student();
}
}
: ํ์ฌ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ reference
this()
: ์์ ์ class๊ฐ ๊ฐ์ง ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ๋ค.
class Person { String name; // ์ด๋ฆ String mobile; // ์ ํ๋ฒํธ public void printAll() { System.out.println("๋ชจ๋ ์ถ๋ ฅ!"); } } class Student extends Person { String name; // ์ผ๋ฐ์ ์ด์ง ์๋ค. String dept; // default constructor public Student() { this("ํ๊ธธ๋"); } public Student(String name) { this.name = name; } public void printAll() { System.out.println("์ค๋ฒ๋ผ์ด๋ฉ!"); } } public class Main { public static void main(String[] args) { Student s = new Student(); } }
: ํ์ฌ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ reference์ธ๋ฐ type์ด ์์ type์ธ ๊ฒ
super()
: ์์ class์ ์์ฑ์๋ฅผ ํธ์ถํ๋ค.
package lecture0712;
class SuperClass {
// static method
static int staticCall(String msg) {
System.out.println(msg);
return 100;
}
// fields
int a = staticCall("1๋ฒ์
๋๋ค.");
static int b = staticCall("2๋ฒ์
๋๋ค.");
// constructor
public SuperClass() {
staticCall("3๋ฒ์
๋๋ค.");
}
public SuperClass(int i) {
this();
staticCall("4๋ฒ์
๋๋ค.");
}
// method
public void myFunc() {
System.out.println("5๋ฒ์
๋๋ค.");
}
}
public class InheritanceTest extends SuperClass {
// fields
int c = staticCall("6๋ฒ์
๋๋ค.");
static int d = staticCall("7๋ฒ์
๋๋ค.");
// constructor
public InheritanceTest() {
super(100);
staticCall("8๋ฒ์
๋๋ค.");
super.myFunc();
}
@Override
public void myFunc() {
System.out.println("9๋ฒ์
๋๋ค.");
}
public static void main(String[] args) {
System.out.println("10๋ฒ์
๋๋ค.");
SuperClass obj = new InheritanceTest();
obj.myFunc(); // => ๋์ ๋ฐ์ธ๋ฉ(dynamic binding)
}
}
๋ด ํ์ด : 2-7-10-1-6-3-4-8-5-9
์ ๋ต : 2-7-10-1-3-4-6-8-5-9
is-a relationship
: class๋ก๋ถํฐ ํ์๋ instance์ data type์ ์์ type์ผ๋ก ๋ณํํ๋ค.
=> ๋คํ์ฑ(Polymorphism)
๋์ ๋ฐ์ธ๋ฉ(dynamic binding)
: ๊ฐ์ฒด์ ๋ํ type์ด ์์ type์ด๋ผ ํ ์ง๋ผ๋ ๋ง์ฝ overriding๋ method๊ฐ ํ์์ ์กด์ฌํ๋ค๋ฉด method๋ overriding ๋ method๋ฅผ ์ฌ์ฉํ๋ค.