자바 추상클래스 + 추상메소드 (abstract)


추상클래스는 인스턴스화가 안됨


객체를 생성할 수 없다는것 인터페이스와의 차이점은 클래스라 상속을 받아서 사용 extends  추상메소드가 꼭 있어야 합니다.


여려 명이 개발을 할 때 하나의 클래스에서 정의를 하고 그 클래스를 직접 사용은 못하게 하면서  정의한 클래스를 오버라이딩 해서 쓰는 경우입니다.  아래 예제를 보면 이해가 빠릅니다~



package ggariAbstract;



//tip 클래스를 가지고 객체를 만드는거 인스턴스화 라고 함 ( 설명? ) 인스턴스화를 막기위해 abstract 사용 하면되긴하는데...



//abstract 키워드를 붙인 클래스를 추상 클래스  추상클래스는 객체로 만들수 없다.

abstract class ContentSender {

String title;

String nm;



// 생성자

public ContentSender(String title, String nm) {

this.title = title;

this.nm = nm;

}



// 본체가없는 메소드

abstract void sendMsg(String content);

}



class letterSender extends ContentSender {

String content;



// 생성자

public letterSender(String title, String nm, String content) {

super(title, nm);

this.content = content;

}



// The type letterSender must implement the inherited abstract method

// ContentSender.sendMsg(String)

// sendMsg 받아 오버라이딩한다.

@Override

void sendMsg(String recipient) {

System.out.println("제목 =" + title);

System.out.println("이름 =" + nm);

System.out.println("내용 =" + content);

System.out.println("받는사람 =" + recipient);

}

}



class kakaoSender extends ContentSender {

String content;



public kakaoSender(String title, String nm, String content) {



// 슈퍼생성자를 물어보시는분은 자바책을꺼내서 다시 공부를..

// 부모에 생성자가 이미 정의가 되어있음

// 만약 super 를 안쓰기위해서 non-arg constructor 호출을 해주면된다 한개더 정의를 하면되겟조?

// ex) public ContentSender() {}

super(title, nm);

this.content = content;

}



@Override

void sendMsg(String recipient) {

System.out.println("제목 =" + title);

System.out.println("이름 =" + nm);

System.out.println("내용 =" + content);

System.out.println("받는사람 =" + recipient);

}

}



class ggariTest {

public static void main(String[] args) {

letterSender ls = new letterSender("안녕하세요?문자", "김영준문자", "방가워 문자야");

kakaoSender ks = new kakaoSender("안녕하세요?카카오", "김영준카카오", "방가워 카카오야");



// 추상메소드 구현 오버라이딩해서 쓴다

ls.sendMsg("그녀1");

ks.sendMsg("그녀2");

}

}





이상~






끝~


Posted by 김까리 까리성

댓글을 달아 주세요