그러나 java8 이상부터는 인터페이스에서 메서드를 정의할 수 있게 되었다.
이 두개의 경계가 점점 더 모호해 지고 있다. 따라서 이 차이를 알고있는지 더 물어본다.
추상클래스와 인터페이스의 차이는 존재의 목적에 있다.
package Example;
public abstract class Animal {
String name;
int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public void move() {System.out.println("이동한다");}
public void eat() {System.out.println("먹는다");}
public abstract void bark(); //짖는 소리는 동물마다 다르므로 추상메서드로 생성
}
추상클래스도 일반클래스와 마찬가지로 필드, 생성자, 메서드를 선언할 수 있다.
자식 객체가 생성될 때 super를 호출하므로 생성자는 반드시 있어야 한다.
bark()
추상메서드는 자식 클래스에서 오버라이드를 강제할 수 있다.
package Example;
public class Dog extends Animal{
public Dog(String name, int age) {
super(name, age);
}
@Override
public void bark() { //메서드 오버라이딩
System.out.println("멍멍!!");
};
}
package Example;
public class Cat extends Animal{
public Cat(String name, int age) {
super(name, age);
}
@Override
public void bark() { //메서드 오버라이딩
System.out.println("야옹~~");
};
}
개, 고양이 클래스를 생성해 동물 클래스를 상속받고 bark()
추상메서드를 오버라이드해 재정의한다.
package Example;
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("강아지",3);
Cat cat = new Cat("고양이",3);
dog.move();
dog.bark();
cat.move();
cat.bark();
}
}
이동한다
멍멍!!
이동한다
야옹~~
package Example;
public interface Animal {
public static final String name = "동물";
public abstract void move();
public abstract void eat();
public abstract void bark();
}
java8 이전에는 상수, 추상메서드만 가능했지만
java8 이후에는 default
, static
, private method
도 인터페이스에 추가할 수 있다.
package Example;
public class Dog implements Animal{
@Override
public void move() {
System.out.println("슥슥~~");
}
@Override
public void bark() {
System.out.println("멍멍!");
}
}
package Example;
public class Cat implements Animal{
@Override
public void move() {
System.out.println("사뿐사뿐~~");
}
@Override
public void bark() {
System.out.println("야옹~~");
}
}
개, 고양이 클래스 생성 후 Animal 인터페이스를 implements 키워드로 구현하고 인터페이스의 추상 메서드들을 오버라이드 해 재정의한다.
package Example;
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
dog.move();
dog.bark();
cat.move();
cat.bark();
}
}
슥슥~~
멍멍!
사뿐사뿐~~
야옹~~
출처 : https://www.youtube.com/watch?v=VE_CDb00bc0&list=PLi-xJrVzQaxU-xK2ao8utngQJqAX4DQty&index=6
https://coding-factory.tistory.com/866
https://coding-factory.tistory.com/867
https://castleone.tistory.com/11