-
JAVA ์๋ฐ ์์, ์ ๊ทผ์ง์ ์JAVA 2020. 8. 6. 00:28
๐ฏ ์๋ฐ ์์, superํค์๋, ์ ๊ทผ์ง์ ์๋ฅผ ์์๋ณธ๋ค.
ํด๋์ค๋ค์ ๊ด๊ณ
has a ๊ด๊ณ : ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ ๊ด๊ณ์ด๋ค. ํํ ์ฌ์ฉ๋๋ค.
is a ๊ด๊ณ : ๋น์ทํ ์์ฑ ๋ฐ ๋์์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ํฐ ๊ฐ๋ ๊ณผ ์์ ๊ฐ๋ ์ผ๋ก ์ค์ ํ ๊ด๊ณ์ด๋ค. ์ด๋ค์ ๊ณตํต์ ์ ๊ฐ์ก๋ค.
์์
public class ์์ํด๋์ค extends ๋ถ๋ชจํด๋์ค { }
๊ฐ์ฒด๋ค ๊ฐ is a ๊ด๊ณ๊ฐ ์ฑ๋ฆฝ๋๋ฉด ์์์ ์ ์ฉํ ์ ์๋ค. ๊ฐ์ฒด๋ค ๊ฐ์ ๊ณตํต์ ์ ์ถ์ถํด์ ์์๊ฐ๋ ๊ฐ์ฒด๋ก ๋ง๋ค๊ณ ํ์ ๊ฐ์ฒด์์ ํ์ํ ๊ฒ๋ค์ ์์๋ฐ์ ์ฌ์ฉํ๋ฉด ์ค๋ณต์ ๊ฑฐ์ ์ฌ์ฌ์ฉ์ฑ ํจ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค.
๋ถ๋ชจํด๋์ค์ ๋ชจ๋ ๋ฉค๋ฒ(์ธ์คํด์ค ๋ณ์, ๋ฉ์๋)๋ฅผ ์์ํด๋์ค์์ ์ ์ธ ์์ด ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์์ํด๋์ค๋ ๋จ ํ๋์ ๋ถ๋ชจํด๋์ค๋ง ๊ฐ์ง ์ ์๋ค.
class Employee{ String name; int salary; public String getEmployee() { return name + " " + salary; } public Employee(){ System.out.println("Employee ๋ถ๋ชจ ๊ธฐ๋ณธ์์ฑ์ ํธ์ถ========="); } public Employee(String name, int salary) { this.name = name; this.salary = salary; } } class Manager extends Employee{ String depart; public String getManager() { return name + " " + salary + " "+depart; } public Manager(String name, int salary,String depart) { super(); //๋ถ๋ชจ ๊ธฐ๋ณธ ์์ฑ์ ํธ์ถ this.name=name; this.salary = salary; this.depart = depart; System.out.println("Manager ์์์์ฑ์ ํธ์ถ========="); } } public class Ex06_1 { public static void main(String[] args) { Employee emp = new Employee("ํ๊ธธ๋", 2000); Manager man = new Manager("์ด์์ ", 4000, "๊ฐ๋ฐ"); System.out.println(emp.getEmployee()); System.out.println(man.getManager()); } }
Manager ํด๋์ค๋ Employee ํด๋์ค์ ์์๋๋ค. ๋ฐ๋ผ์ ๋ถ๋ชจํด๋์ค์ ๋ณ์๋ฅผ ์ ์ธ ์์ด ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง ์์ฑ์๋ ์์ํด๋์ค์ ์์๋์ง ์๋๋ค. ๋ฐ๋ผ์ ํธ์ถ์ ํตํด ์ฌ์ฉํ ์ ์๋ค.
์ดํด๋ฆฝ์ค ๋๊ตฌ๋ก ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ๋ง๋ค์ด๋ณด๋ฉด ์์ํด๋์ค์ ์์ฑ์ ์ฒซ ๋ผ์ธ์ super()๋ก ๋ถ๋ชจ์ ๊ธฐ๋ณธ์์ฑ์ ํธ์ถํจ์๋ฅผ ์๋์ผ๋ก ๋ถ๋ฌ์จ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ถ๋ชจํด๋์ค๊ฐ ๋จผ์ ์์ฑ๋์ด์ผ ๋ถ๋ชจ์ ๋ฉค๋ฒ๋ฅผ ์์์ด ์ด์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจํด๋์ค์ ๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ ๋ ์ฒซ๋ผ์ธ์ super()๋ฅผ ๋ช ์ํด์ ๋ถ๋ชจํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋จผ์ ์์ฑํ๋ค.
class Employee { String name; int salary; public String getEmployee() { return name+ " "+ salary; } public Employee() { } public Employee(String name, int salary) { this.name = name; this.salary = salary; } } class Manager extends Employee { String depart; public String getManager() { return super.getEmployee()+ "\t"+ depart; } public Manager(String name, int salary, String depart) { super(name, salary); this.depart = depart; } } public class Ex06_3 { public static void main(String[] args) { // TODO Auto-generated method stub Employee emp = new Employee("ํ๊ธธ๋",2000); Manager man = new Manager("์ด์์ ", 4000, "๊ฐ๋ฐ"); System.out.println(emp.getEmployee()); System.out.println(man.getManager()); } }
๋งค๋์ ํด๋์ค์ ๋ฉ์๋์ ์์ฑ์๋ฅผ ๋ณด๋ฉด Employeeํด๋์ค์ name, salary ๋ณ์๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ์ง ์๊ณ super ํค์๋๋ฅผ ํตํด ๋ถ๋ชจ์ ์ธ์คํด์ค๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฑธ ๋ณผ ์ ์๋ค.
์ฐ์ต) Pet ํด๋์ค๋ฅผ ์์๋ฐ๋ cat, dog, fish ํด๋์ค์ TestPetํด๋์ค๋ฅผ ๋ง๋ ๋ค.
// Pet public class Pet { String name; int age; public Pet() { } public Pet(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void printInfo() { System.out.println("์ด๋ฆ" +"\t"+ "๋์ด"); } }
cat, dog, fish ๋๋ฌผ๋ค์ ๊ณตํต ์์ฑ์ธ name๊ณผ age๋ฅผ ๋ชจ์์ ๋ถ๋ชจํด๋์ค์ธ Pet์ ๋ง๋ค์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ณธ์์ฑ์๋ฅผ ํฌํจํด ์์ฑ์๋ฅผ ๋ง๋ค๊ณ , ํธ์ถ์ ์ํด get set ํจ์๋ฅผ ๋ง๋ค๊ณ , ๋ชจ๋ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ ์ ์๋๋ก printInfo ํจ์๋ฅผ ์์ฑํ๋ค.
//Cat public class Cat extends Pet { private String gender; //์ ์ผ์์ฑ public Cat() { super(); } public Cat(String name, int age, String gender) { super(name, age); //๊ทธ๋ฅ this์จ๋ ๋จ this.gender = gender; } //๋์ public void cryCat() { System.out.print("์ผ์น~"); } public void eatCat() { System.out.println("์์ ๋จน๊ธฐ"); } public void sleepCat() { System.out.println("์๊ทผ์๊ทผ~"); } // name๊ณผ age ๊ฒ์ ์ ๋ ๋ ค๋ฒ๋ฆผ. ๋ถ๋ชจ์ ์์ผ๋๊น } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public void printInfo() { System.out.println(name +"\t"+ age+"\t"+ gender); } }
//dog public class Dog extends Pet { private String gender; //์ ์ผ์์ฑ private String color; //์ ์ผ์์ฑ public Dog() { } public Dog(String name, int age,String gender, String color) { super(name, age); this.gender = gender; this.color = color; } //๊ฐ์ ๊ด๋ จ๋ ๋์ ํจ์ public void cryDog() { System.out.println("๋ฉ๋ฉ~"); } public void eatDog() { System.out.println("์ฌ๋ฃ ๋จน๊ธฐ"); } public void sleepDog() { System.out.println("์ฟจ์ฟจ~"); } //๋ค๋ฅธ ์ ์๋๋ฌผ์ ์๋ ๊ธฐ๋ฅ ๊ฐ์ ... public void runDog() { System.out.println("๋ฐ๋ฐ~"); } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public void printInfo() { System.out.println(name +"\t"+ age+"\t"+ gender+"\t"+color); } }
// Fish public class Fish extends Pet{ private String gender; //์ ์ผ์์ฑ private double tailSize; //Fish์๋ง ์กด์ฌํ๋ ์ ์ผ์์ฑ public Fish() { } public Fish(String name, int age,String gender, double tailSize) { super(name, age); this.gender = gender; this.tailSize = tailSize; } //๋์ public void swimFish() { System.out.println("์ดํธ์ดํธ~"); } //Fish ํด๋์ค ์ ์ผ ํจ์ public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; public double getTailSize() { return tailSize; } public void setTailSize(double tailSize) { this.tailSize = tailSize; } public void printInfo() { System.out.println(name +"\t"+ age+"\t"+ gender+"\t"+ tailSize); } }
name๊ณผ age๋ ๋ถ๋ชจํด๋์ค์ ์กด์ฌํ๋ ๊ณตํต ์์ฑ์ด๊ธฐ ๋๋ฌธ์ ๋ ๋ ค๋ฒ๋ฆฌ๊ณ ์ ์ผํ ์์ฑ๋ง ๋จ๊ฒผ๋ค. ๋ง์ง๋ง ์ค์ printInfoํจ์๋ฅผ ๋ณด๋ฉด ์ ์ธ ์์ด ๋ถ๋ชจํด๋์ค์ ๊ธฐ์ฌํ name๊ณผ age๋ฅผ ๊บผ๋ด ์ธ ์ ์๋ ๊ฑธ ์ ์ ์๋ค.
// TestPet public class TestPet { public static void main(String[] args) { Pet p = new Pet(); Cat c = new Cat("์ผ์น์ด", 3, "์๋"); Dog d = new Dog("๋ฉ๋ฉ์ด", 4, "์ซ๋", "๊ฒ์ "); Fish f = new Fish("๋ฌผ๊ณ ๊ธฐ", 4, "์๋", 1.5); p.printInfo(); c.printInfo(); d.printInfo(); f.printInfo(); } }
mainํจ์๋ฅผ ๊ฐ์ง TestPetํด๋์ค์์ ๊ฐ์ฒด์์ฑ์ผ๋ก ์์ฑ์์ ๊ฐ์ ๋ณด๋ธ ํ printInfoํจ์๋ฅผ ํธ์ถํ๋ค.
์ ๊ทผ์ง์ ์
ํด๋์ค๋ค ๊ฐ ์ํธ์์ฉ์ ๋ณด์๊ณผ ์ฝ๋ ํจ์จ์ฑ์ ์ํด ์ ๊ทผ์ ์ ์ดํ ์ ์๋ค. ํด๋์ค, ๋ฉ์๋, ์ธ์คํด์ค ๋ณ์๋ฅผ ์ ์ธํ ๋ ์ ๊ทผ์ง์ ์๋ฅผ ๋ถ์ผ ์ ์๋ค. 'public, protected, (default), private'
class Super{ public int num1 = 10; // ์ฌ์ฉ๊ฐ๋ฅ. ์ ๊ทผ์ ํ ์์ protected int num2 = 20; //๊ฐ์ ํจํค์ง์ธ ๊ฒฝ์ฐ ์ฌ์ฉ๊ฐ๋ฅ int num3 = 30; //default ์ฌ์ฉ๊ฐ๋ฅ private int num4 = 40; //์ฌ์ฉ ๋ถ๊ฐ๋ฅ. ๊ฐ์ ํด๋์ค์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ. public int getNum4() { // private์ ์ ๊ทผํ๊ธฐ ์ํด ํผ๋ธ๋ฆญ ๋ฉ์๋ ์ฌ์ฉ return num4; } } class Sub extends Super{ private int num5; //private์ด์ง๋ง ๊ฐ์ ํด๋์ค ๋ด ์ ๊ทผ์ ์ฌ์ฉ๊ฐ๋ฅ. public void print() { System.out.println(num1); System.out.println(num2); System.out.println(num3); System.out.println(getNum4()); System.out.println(num5); //๊ธฐ๋ณธ๊ฐ 0์ถ๋ ฅ } } public class ex06_4 { public static void main(String[] args) { Sub sub = new Sub(); sub.print(); } }
์ผ๋ฐ์ ์ผ๋ก ์ธ์คํด์ค ๋ณ์์ private์ ์ฌ์ฉํ๋ค. public์ ์ ๊ทผ ์ ํ์ด ์์ผ๋ฉฐ protected๋ ํจํค์ง๊ฐ ๋ค๋ฅด์ง๋ง ์์๊ด๊ณ์ธ ๊ฒฝ์ฐ์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค. default๋ ํจํค์ง๊ฐ ๋ค๋ฅด๋ฉด ์ ๊ทผํ ์ ์๋ค.
๐ NEXT : ์๋ฐ ๋คํ์ฑ๊ณผ ์ค๋ฒ๋ผ์ด๋ฉ ๊ณต๋ถํ๊ธฐ
๋ฐ์ํ'JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JAVA ์๋ฐ ์ถ์ํด๋์ค abstract (0) 2020.08.07 JAVA ์๋ฐ ์ค๋ฒ๋ผ์ด๋ฉ, ๋คํ์ฑ (0) 2020.08.06 JAVA ์๋ฐ ์ค๋ฒ๋ก๋ฉ, this, final, static, varags (0) 2020.08.04 JAVA ์๋ฐ ํด๋์ค ๋ชจ๋ํ ์ฐ์ตํ๊ธฐ (0) 2020.08.03 JAVA ์๋ฐ ๊ฐ์ฒด, ํด๋์ค, ๋ฉ์๋, ์์ฑ์ (0) 2020.08.02