본문 바로가기

웹 개발

웹 개발_자_2022/10/31_추상클래스

package j13_추상화.추상클래스;
//class 앞에도 abstract가붙는 다  추상메소드가 하나라도있으면 해당클래스는 추상클래스로 정의되어야 한다
//2.추상 클래스는 생성할수없다
//3. 그외의 다른 특징은 일반 클래스와 동일 하다
//4.추상클래스는 무조건 상속받아서 서야한다
//무조건 1:n관계이다
//상속은 1개만 가능
public abstract class Factory {
    private String name;

    public Factory(String name) {
        this.name = name;
    }
    /**
     * abstract 추상적인*/
    public abstract void produce(String model);//구현이 필요가 없기에 바로;찍고 끝넴
    public abstract void managemant();
    public String getName() {
        return name;
    }
    public void printinfo() {//추상클래스에서도 일반 메소드 정의 가능
        System.out.println("공장 정보를 출력 합니다");
        System.out.println("공장이름"+name);
    }

}
package j13_추상화.추상클래스;

public class Main {
    public static void main(String[] args) {
        PhoneFactory phoneFactory = new PhoneFactory("애플 스마트폰 공장");
        TabletFactory tabletFactory = new TabletFactory("애플태블릣공장");
        phoneFactory.produce("아이폰14");
        tabletFactory.produce("아이패드 프로5");
        phoneFactory.printinfo();
        tabletFactory.printinfo();
        //Factory factory = new Factory(); 추상 클래스는 생성x
    }
}
package j13_추상화.추상클래스;

public class PhoneFactory extends Factory {
    @Override
    public void produce(String model) {
        System.out.println("[" + model + "]" + "모델 스마트폰을 생산합니다.");
    }

    @Override
    public void managemant() {
        System.out.println("태블릿 공장 관리");
    }

    public PhoneFactory(String name) {
        super(name);
    }
}
package j13_추상화.추상클래스;

public class TabletFactory extends Factory {
    public void produce(String model){
        System.out.println("["+model+"]"+"모델 태블릿을 생산합니다.");
    }

    @Override
    public void managemant() {
        System.out.println("태블릿 공장 관리");
    }

    public TabletFactory(String name) {
        super(name);
    }
}

 이추상클래스는 클래스를 위한 틀이다 이걸 상속받아서 특정기능은 꼭만들도록 해주는 것이다