
์ถ์ ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํด๋์ค
๐๐ผ ์์ ํ ๊ตฌํ๋์ง ์์ ๋ฉ์๋๋ก ๊ท๊ฒฉ๋ง ์กด์ฌํ์ฌ ์คํํ ์ ์์
๐๐ผ ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ๋๋ก ๊ฐ์ ํ๋ ํ
ํ๋ฆฟ ์ญํ
abstract ํค์๋ ์ฌ์ฉํ์ฌ ์ ์ธ๐์ถ์ ํด๋์ค
abstract class AbstractClass {
// ๊ตฌํ๋ ๋ฉ์๋
public void implementedMethod() {
System.out.println("a");
}
// ์ถ์ ๋ฉ์๋
public abstract void abstractMethod();
}
๐์์ ํด๋์ค
class ConcreteClass extends AbstractClass {
public void abstractedMethod() {
System.out.println("b");
}
}
๐๋ฉ์ธ ํด๋์ค
public class Main {
public static void main(String[] args) {
ConcreteClass cc = new ConcreteClass();
cc.implementedMethod(); // a
cc.abstractMethod(); // b
}
}
๋ชจ๋ ๋ฉ์๋๊ฐ ์ถ์ ๋ฉ์๋์ธ ํด๋์ค(๊ธฐ๋ฅ ๋ช ์ธ์)
interface ํค์๋ ์ฌ์ฉ public abstract์ด๋ฉฐ, ์๋ต ๊ฐ๋ฅpublic static final์ด๋ฉฐ, ๋ณ๊ฒฝ๋ ์ ์๋ ์์static : ๊ฐ์ฒด ์์ฑํ์ง ์์๋ ์ฌ์ฉ ๊ฐ๋ฅimplements ํค์๋ ์ฌ์ฉ,๋ก ๊ตฌ๋ถํ์ฌ ๋์์ ๊ตฌํ ๊ฐ๋ฅ ๐๐ผ ๋ค์ค ์ธํฐํ์ด์ค๐์ธํฐํ์ด์ค
interface Animal {
void eat();
void sleep();
}
๐์ธํฐํ์ด์ค ๊ตฌํ
class Dog implements Animal {
public void eat() {
System.out.println("Dog eats");
}
public void sleep() {
System.out.println("Dog sleeps");
}
}
๐๋ฉ์ธ ํด๋์ค
class Main {
public static void main(String[] args) {
// Dog์ ํํ๋ฅผ ๊ฐ์ง๋ myDog
// Animal์ ๊ธฐ๋ฅ์ ํ ์ ์๋ myDog
Dog myDog = new Dog();
myDog.eat();
myDog.sleep();
}
}
๐์ธํฐํ์ด์ค
interface Flyable {
void fly();
}
interface Runnable {
void run();
}
class Animal {
// ...
}
๐์ธํฐํ์ด์ค ๋ค์ค์์
class SuperAnimal extends Animal implements Runnable, Flyable {
public void run() {
System.out.println("running");
}
public void fly() {
System.out.println("flying");
}
}