package JAVA_abstract;
public abstract class Unit { //추상클래스 -> 추상 메서드를 하나라도 가지고 있으면 추상 클래스!
private String name;
//생성자
public Unit(String name){
super();
this.name= name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//추상메서드 -> 상속을 통해 재정의 해야 비로소 인스턴스 생성 가능
public abstract void attack(); //Override 필요
public abstract void move(); //Override 필요
}
package JAVA_abstract;
public class Army extends Unit{ //abstract 추상화
public Army(String name) {
super(name);
}
@Override //오버라이딩
public void attack() {
System.out.println(this.getName()+" >> 육상공격!!");
}
@Override
public void move() {
System.out.println(this.getName()+">> 육상이동!");
}
}
package JAVA_abstract;
public class Navy extends Unit{
public Navy(String name) {
super(name);
}
@Override
public void attack() { //추상클래스 override
System.out.println(this.getName()+" >> 해군 공격!");
}
@Override
public void move() { //추상클래스 override
System.out.println(this.getName()+" >> 해상 이동");
}
}
package JAVA_abstract;
public class Main01 { //abstract 추상화
public static void main(String[] args) {
Army army = new Army("육군");
Navy navy = new Navy("해군");
//추상클래스 오버라이딩 메소드 호출
army.move(); //오버라이딩 된 결과값이 출력된다. 즉 army의 move함수가 실행
army.attack();
navy.move(); // navy의 move 함수가 실행
navy.attack();
/* 오버라이딩과 오버로딩의 차이
* 오버로딩은 이름은 같지만 시그니처(파라미터수, 타입)는 다른 메소드를 중복 선언하는것
* 오버라이딩은 이름,시그니처 모두 같은 메소드를 재정의하는 것이다.
*/
}
}
[실행결과]
육군 >> 육군 이동
육군 >> 육군 공격
해군 >> 해군 이동
해군 >> 해군 공격
xxxxable
형식으로 네이밍한다!package JAVA_interface;
public interface action {//interface 선언 방식
//추상 메서드 -> Character이라는 클래스에서 구현할
public void pickup();
}
package JAVA_interface;
public interface fight {//interface 선언 방식
public void attack(); // 추상메서드
public void shield(); //추상 메서드
}
package JAVA_interface;
public interface move {//interface 선언 방식
public void walk(); // 추상메서드
public void run(); // 추상메서드
public void jump(); //추상메서드
}
package JAVA_interface;
public class Character implements action,move,fight {
private String name;
public Character(String name) {
this.name=name;
}
@Override
public void pickup() { // action인터페이스의 추상메스드 구현
System.out.println(this.name + "아이템을 줍다");
}
@Override
public void attack() { //fight인터페이스의 추상메스드 구현
System.out.println(this.name + "공격");
}
@Override
public void shield() { //fight인터페이스의 추상메스드 구현
System.out.println(this.name + "방어");
}
@Override
public void walk() { //move 인터페이스의 추상메서드 구현
System.out.println(this.name + "걷다");
}
@Override
public void run() { //move 인터페이스의 추상메서드 구현
System.out.println(this.name + "뛰다");
}
@Override
public void jump() { //move 인터페이스의 추상메서드 구현
System.out.println(this.name + "점프");
}
}
interface Printable{
public abstract void paper();
public default void setPrint(boolean color){ //디폴트 메서드
if (color){
System.out.println("컬러 출력");
}
else (color){
System.out.println("흑백 출력");
}
}
}