μλ°(JAVA)λ κ°μ²΄μ§ν₯νλ‘κ·Έλλ°(Object Oriented Programing, OOP)μΌλ‘, 4κ°μ§ νΉμ±μ κ°μ§λ€.
1. μμ (Inheritance)
2. λ€νμ± (Polymorphism)
3. μΆμν (Abstraction)
4. μΊ‘μν (Encapsulation)
μ΄ μ€ μμκ³Ό μλ°μ λ€μ€μμ(μΈν°νμ΄μ€)μ λν΄ μ 리ν΄λ³΄μ.
1. μμ
1-1. μ€λ²λΌμ΄λ© @Override
1-2. super
2. μΈν°νμ΄μ€
3. μΆμν΄λμ€
1. μμ
- λΆλͺ¨ ν΄λμ€(μνΌν΄λμ€)μ μμ±κ³Ό κΈ°λ₯μ κ·Έλλ‘ λ¬Όλ €λ°λλ€.
- extends ν€μλλ₯Ό μ¬μ©νλ€.
- extends λμμ νλλ§ μ νν μ μλ€. (νλμ λΆλͺ¨ν΄λμ€λ§ μμλ°μ μ μλ€! ) π
- μμμ΄ μμμ λ°κ² λλ©΄, λ¨μν λΆλͺ¨μ νλμ λ©μλλ§ λ¬Όλ €λ°λκ² μλ, λΆλͺ¨μ ν΄λμ€λ ν¨κ» ν¬ν¨λμ΄ μμ±λλ€.
- μμκ΄κ³μ κ°μ²΄λ₯Ό μμ±νλ©΄, μΈλΆμμ λ³Όλλ νλμ μΈμ€ν΄μ€λ₯Ό μμ±νλ κ² μ²λΌ 보μ΄λ, μ€μ λ΄λΆμμλ λΆλͺ¨μ μμμ΄ λͺ¨λ μμ±λλ©° κ°κ° 곡κ°μ΄ ꡬλΆλλ€.
λ§μ½, carλΌλ λΆλͺ¨ ν΄λμ€ μλμ ElectricCar,GasCar, HydrogenCar μ΄λΌλ μΈκ°μ§ μμ ν΄λμ€κ° μ‘΄μ¬ν λμ μμλ€.
-λΆλͺ¨ ν΄λμ€ Car
package extends1.ex3;
public class Car
{
public void move()
{
System.out.println("μ°¨λ₯Ό μ΄λν©λλ€.");
}
public void charge(){
}
}
-μμ ν΄λμ€ ElectricCar
package extends1.ex3;
public class ElectricCar extends Car
{
@Override public void charge()
{
System.out.println("μΆ©μ ν©λλ€.");
}
}
-μμ ν΄λμ€ GasCar
package extends1.ex3;
public class GasCar extends Car
{
@Override public void charge()
{
System.out.println("κΈ°λ¦μ μ£Όμ ν©λλ€.");
}
}
-μμ ν΄λμ€ HydrogenCar
package extends1.ex3;
public class HydrogenCar extends Car{
@Override public void charge()
{
System.out.println("μμλ₯Ό μΆ©μ ν©λλ€.");
}
}
μ΄λ κ² νλμ λΆλͺ¨ ν΄λμ€ μλμ μΈκ°μ μμ ν΄λμ€κ° μλ μ μ΄λ€.
- CarMainμμλ κ°κ°μ μμ ν΄λμ€λ€μ κ°μ²΄λ₯Ό μμ±νμ¬, λΆλͺ¨ ν΄λμ€ λ΄λΆμ move()λ₯Ό νΈμΆνκ³ μμμ νμΈν μ μλ€.
-κ°κ°μ μμν΄λμ€μμλ λΆλͺ¨ ν΄λμ€μμ μ μΈλ§ ν΄λ ν¨μ 'charge()' λ₯Ό κ°κ°μ μμν΄λμ€μμ
@Overrideν΄μ μ μνκΈ° λλ¬Έμ, κ°κ°μμμ ν΄λμ€ κ°μ²΄λ‘ νΈμΆν charge()λ κ°κ° μ μν λ΄μ©μ΄ μΆλ ₯λλ€.
[λ©μΈλ¬Έ]
package extends1.ex3;
public class CarMain
{
public static void main(String[] args)
{
ElectricCar electricCar=new ElectricCar();
electricCar.move();
electricCar.charge();
GasCar gasCar=new GasCar();
gasCar.move();
gasCar.charge();
HydrogenCar hydrogenCar = new HydrogenCar();
hydrogenCar.move();
hydrogenCar.charge();
}
}
1-1. @Override μ€λ²λΌμ΄λ©
λ©μλ μ€λ²λΌμ΄λ©(Overriding)
- λΆλͺ¨μκ²μ μμλ°μ κΈ°λ₯μ μμ ν΄λμ€μμ μ¬μ μνλ κ²μ λ§νλ€.
- μ΄λ―Έ λΆλͺ¨ν΄λμ€μμ μ μλμ΄μλ λ©μλμ¬λ μμλ°μ μμμ 'μ¬μ μ'κ° κ°λ₯νλ€.
- @Override λ μμν΄λμ€μ λ©μλλ₯Ό ν΄λΉ ν΄λμ€κ° μ μν¨μ λνλ΄λ μ λ Έν μ΄μ μ΄λ€. (νκΈ°ν΄μ€μΌν¨!)
μμ κ°κ°μ μμ ν΄λμ€(ElectricCar, GasCar, HydrogenCar)λ€μμ λΆλͺ¨ ν΄λμ€μ charge() λ©μλλ₯Ό 'μ μν΄μ€λ'
@Override λ₯Ό λͺ μν΄μ€ κ²μ νμΈν μ μλ€.
1-2. super
super ν€μλ
- λΆλͺ¨μ μμμ νλλͺ (λ©€λ²λ³μ)μ΄ κ°κ±°λ λ©μλκ° μ€λ²λΌμ΄λ© λΌμλ κ²½μ° -> μμμ λΆλͺ¨μ νλ,λ©μλλ₯Ό νΈμΆν μ μλ€.
- super ν€μλλ₯Ό μ¬μ©νλ©΄ λΆλͺ¨μ λ©μλ νΉμ νλλͺ μ κ°μ Έμ μ°Έμ‘° ν μ μμ΄μ§λ€.
μλλ Parentν΄λμ€λ₯Ό μμλ°λ μμ ν΄λμ€ Child ν΄λμ€μ΄λ€.
package extends1.super1;
public class Child extends Parent{
public String value ="child";
@Override
public void hello(){
System.out.println("child, hello! ");
}
public void call(){
System.out.println("this value= "+ this.value); //νμ¬ μκΈ°μμ μ value
System.out.println("super value= "+ super.value); //λ΄ λΆλͺ¨μ value
this.hello();
super.hello();
}
}
μλλ λΆλͺ¨ν΄λμ€μΈ Parentν΄λμ€λ€.
package extends1.super1;
public class Parent {
public String value = "parent";
public void hello(){
System.out.println("hello, parent");
}
}
μ΄ λ ν΄λμ€λ κ°κ° λ©€λ²λ³μλ‘ λ³μμ΄λ¦μ΄ valueλ‘ λμΌν λ³μλ₯Ό κ°μ§κ³ μμΌλ©°,
λΆλͺ¨ ν΄λμ€μ λ©μλ hello() λ©μλλ₯Ό μμν΄λμ€κ° μ€λ²λΌμ΄λ© νκ³ μλ€.
λμΌν λ³μμ λ©μλλ₯Ό κ°μ§κ³ μλ μν©μ΄λ€.
μμ ν΄λμ€ λ΄λΆμ call() μ΄λΌλ λ©μλλ΄μμ
this.valueλ₯Ό νλ©΄, μμ ν΄λμ€ λ΄λΆμ λ©€λ²λ³μ valueλ₯Ό κ°λ¦¬ν€κ³ ,
super.valueλ₯Ό νλ©΄, λΆλͺ¨ ν΄λμ€ λ΄λΆμ λ©€λ²λ³μ valueλ₯Ό κ°λ¦¬ν€λ κ²μ νμΈν μ μλ€.
κ·Έ μλμ hello() λ©μλλ₯Ό κ°λ¦¬ν€λ κ²λ λ§μ°¬κ°μ§μ΄λ€.
this.hello()λ μμμ΄ μ€λ²λΌμ΄λ©ν hello() ,
super.hello()λ λΆλͺ¨μ λ©μλ hello()λ₯Ό κ°λ¦¬ν¨λ€.
2. μΈν°νμ΄μ€(Interface)
μλ°μμ extendsλ₯Ό μ΄μ©ν λΆλͺ¨ ν΄λμ€ μμμ νλμ ν΄λμ€λ§ μμν μ μλ€λ νΉμ±μ κ°μ§κΈ° λλ¬Έμ,
μΈν°νμ΄μ€(Interface)λ₯Ό μ¬μ©νμ¬ μ¬λ¬ ν΄λμ€λ₯Ό λ€μ€μμ λ°μ μ μλ€.
μΈν°νμ΄μ€(Interface)
- λ΄λΆ λͺ¨λ λ©μλλ public abstract λ‘ μ μνλ€. (μλ΅κ°λ₯)
- λ΄λΆ λͺ¨λ νλλ public static final μμλ‘ μ μνλ€. (μλ΅κ°λ₯)
- implements ν€μλλ‘ κ΅¬ννλ€.
- μ€μ§ 'μΆμλ©μλ'(λ©μλ)μ 'μμ'(νλ)λ§μ λ©€λ²λ‘ κ°μ§ μ μλ€.
- μΈν°νμ΄μ€λ μΈν°νμ΄μ€λ‘λΆν°λ§ μμλ°μ μ μλ€.
- μ¬λ¬κ°μ μΈν°νμ΄μ€λ‘λΆν° μμλ°λ κ²μ΄ κ°λ₯νλ€.
π λͺΈν΅μ΄ μλ λ©μλμ λ©€λ²λ³μλ₯Ό κ°μ§ μ μλ€.
= μ μΈλ§ ν΄μ€ ννμ λ©μλ, λ©€λ²λ³μλ₯Ό κ°μ ΈμΌν¨.
π μΆμ λ©μλμ λ©μλμ λͺΈν΅μ λ§λ€μ΄μ€ ν΄λμ€λ₯Ό λ°λ‘ μμ±ν΄μΌνλ€.
[μΈν°νμ΄μ€ Base ]
package com.poly.test03;
//μΈν°νμ΄μ€ interface
public interface Base {
public void bark();
public abstract void eat(String ani); //public abstractκ° μμ μλ΅κ°λ₯
}
[μΈν°νμ΄μ€ Test ]
package com.poly.test03;
public interface Test {
}
[Cat ν΄λμ€μμ interface Baseμ Testμ μμλ°κ³ (λ€μ€μμ) μ μ]
package com.poly.test03;
public class Cat implements Base, Test{
@Override
public void bark() {
System.out.println("μΌμΉ");
}
@Override
public void eat(String ani) {
System.out.println(ani + "λ¨Ήλλ€");
}
}
[Dog ν΄λμ€μμ interface Baseμ Testμ μμλ°κ³ (λ€μ€μμ) μ μ]
package com.poly.test03;
public class Dog implements Base,Test{
@Override
public void bark() {
System.out.println("λ©λ©");
}
@Override
public void eat(String t) {
System.out.println(t + "λ¨Ήλλ€");
}
}
[λ©μΈ λ©μλμμ κ°μ²΄ μμ±]
- Interface base λ Dogκ³Ό Catκ° μΈν°νμ΄μ€λ‘ ꡬνν ν΄λμ€μ μ‘°μμ΄λ€. λ°λΌμ ν΄λΉ μΈν°νμ΄μ€ νμ μ μ°Έμ‘°λ³μλ‘ μ΄λ₯Ό ꡬνν ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλ€.
- λν μΈν°νμ΄μ€μ νμ μΌλ‘ νλ³νλ κ°λ₯νλ€.
package com.poly.test03;
public class MTest {
public static void main(String[] args) {
Base b = new Cat();
b.bark();
b.eat("μ°ΈμΉ");
b = new Dog();
b.bark();
b.eat("μ¬λ£");
}
}
3. μΆμ ν΄λμ€(Abstract Class)
μΆμν΄λμ€ (Abstract Class)
- μΆμ ν΄λμ€λ λΆλͺ¨ν΄λμ€λ₯Ό μμνμ¬ λΆλͺ¨ ν΄λμ€κ° κ°μ§ κΈ°λ₯λ€μ ꡬννλ κ²½μ°, μ¬μ©νλ€.
- non-static, non-final νλ μ μΈμ΄ νμν κ²½μ°
- κ° λ©μλλ€μ {} μμ μ μν κ²μ μμνκ³ μΆμλ
- μμν κ°μ²΄λ€μ 곡ν΅μ (λ³μνμ )μ μ°Ύμ μΆμνμμΌλμ κ²μ΄λ€. λ°λΌμ μ€λ³΅λλ λ©€λ²λ€μ ν΅ν© ν μλ μλ€. (μΈν°νμ΄μ€λ λΆκ°λ₯νλ€.)
[μμ]
class NewlecExam {
int kor; // μ€λ³΅λλ λ©€λ²
int eng; // μ€λ³΅λλ λ©€λ²
int math; // μ€λ³΅λλ λ©€λ²
int com;
void total(){} // μ€λ³΅λλ λ©€λ²
void avg(){} // μ€λ³΅λλ λ©€λ²
}
class YBMExam{
int kor; // μ€λ³΅λλ λ©€λ²
int eng; // μ€λ³΅λλ λ©€λ²
int math; // μ€λ³΅λλ λ©€λ²
int toeic;
void total(){} // μ€λ³΅λλ λ©€λ²
void avg(){} // μ€λ³΅λλ λ©€λ²
}
μ μ½λμ κ°μ΄ κ°κ°μ κ³Όλͺ©λ€κ³Ό λ©μλκ° μ€λ³΅λλ μν©μΌλ,
1. 곡ν΅μ μΈ κ΅,μ,μ λ©€λ² νλλ₯Ό μμμ ν΅ν΄ μμ ν΄λμ€λ‘ λ¬Άλλ€.
2. λ©μλλ₯Ό ν΅ν©νκ³ μΆμν(Abstract) ν΄μ λ€λ₯Έ μ’ λ₯μ ν΄λμ€λ₯Ό μΆκ°ν΄λ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μλ€.
[ν΅ν© μμ]
abstract class Exam {
int kor;
int eng;
int math;
abstract void total();
abstract void avg();
}
class NewlecExam extends Exam {
int com;
void total(){}
void avg(){}
}
class YBMExam extends Exam {
int toeic;
void total(){}
void avg(){}
}
-μ½λ μμ μΆμ²: [Inpa Dev π¨π»:ν°μ€ν 리]
*곡λΆνκΈ° μ’μλ μμ
public abstract class Animal {
public abstract void bark();
public void eat(String ani) {
System.out.println(ani + "λ¨Ήλλ€");
}
}
public interface Bird {
void fly();
}
public class Cat extends Animal {
@Override
public void bark() {
System.out.println("μΌμΉ");
}
@Override
public void eat(String feed){
System.out.println("κ³ μμ΄κ°"+ feed+"λ¨Ήλλ€!");
}
}
public class Dog extends Animal {
@Override
public void bark() {
System.out.println("λ©λ©");
}
public void bite() {
System.out.println("κΉ¨λ¬Όλ€..");
}
@Override
public void eat(String feed){
System.out.println("κ°μμ§κ°"+ feed+"λ¨Ήλλ€!");
}
}
public class Pigeon extends Animal implements Bird {
@Override
public void bark() {
System.out.println("9999999");
}
@Override
public void fly() {
System.out.println("νλ₯νλ₯");
}
}
public class MTest {
public static void main(String[] args) {
Cat cat = new Cat();
cat.bark();
cat.eat("μ°ΈμΉ");
Dog dog = new Dog();
dog.bark();
dog.eat("κ°κ»");
dog.bite();
Pigeon p = new Pigeon();
p.bark();
p.eat("λΉ΅");
p.fly();
}
}
νλ¦° λΆλΆμ΄λ μ΄μν λΆλΆμ΄ μμΌλ©΄ λκΈλ‘ μ§μ ν΄μ£ΌμΈμ!
κ°μ¬ν©λλ€ :)
'π» > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JAVA] μλ° μμΈμ²λ¦¬(Exception)- try catchλ¬Έ, throw, throws (12) | 2024.09.04 |
---|---|
[JAVA] String ν΄λμ€ / StringBuffer ν΄λμ€ / StringBuilder ν΄λμ€ Β· λΉκ΅ μ 리 (+StringTokenizer ν΄λμ€) (5) | 2024.09.03 |
[JAVA] μλ° λ©λͺ¨λ¦¬ ꡬ쑰 (0) | 2024.08.28 |
[JAVA] μ κ·Ό μ μ΄μ (private, default, protected, public) (0) | 2024.08.10 |
[JAVA] μμ±μμ this. (1) | 2024.08.10 |