-
[JAVA 27] 자바 ④ 추상 제한자 ( abstract ) < 추상 메소드 / 추상 클래스 >Language/Java 2018. 2. 14. 15:12반응형
4) 추상 제한자 ( abstract )
(1) abstract 가 붙으면 추상화가 된다.
(2) 특징
① Class 또는 method 앞에만 붙을 수 있다.
1234567891011121314151617abstract class AbstractS1{ // abstract study 1abstract int i;abstract AbstractS1(){System.out.println(" 추상 생성자 가능 여부 확인");System.out.println(" i : " + i);}abstract void m(){System.out.prinltn(" 추상 메소드 가능 여부 확인");}public static void main(String[] args){new AbstractS1().m();}}error : mdifier abstract not allowed here
abstract 멤버 변수 ;
abstract 생성자();
에러 : 추상 제한자는 여기에서 허용되지 않습니다.
error : abstract methods cannot here a body
abstract void m();
에러 : 추상 메소드는 여기에 바디(= 블록 , {} ) 이 올 수 없습니다.
error : AbstractS1 is abstract; cannot be instantiated
에러 : AbstractS1 은 추상이다 : 인스턴스화 할수 없다.
( 인스턴스 Instance = 쉽게 말해서 객체 Object // 나중 포스팅에서 설명 하겠습니다.)
② Abstract 가 붙은 클래스를 ' 추상 클래스 ' 라고 한다.
Abstract 가 붙은 메소드를 ' 추상 메서드 ' 라고 한다.
③ 하나 이상의 추상 메소드가 있다면 클래스는 반드시 추상 클래스가 되어야 한다.
1234567891011121314class AbstractS3{abstract void m1();void m2(){System.out.println(" 메소드 ");}public static void main(String[] args){AbstractS3 as3 = new AbstractS3();as3.m1();as3.m2();}}cs error : AbstractS3 is not abstract and does not ovverride abstract method m1() in AbstractS3
class AbstractS3()
에러 : AbstractS3 클래스는 추상화가 아니다.
그리고 AbstractS3 클래스의 추상 메소드 m1() 이 오버라이딩(= 재정의) 되지 않았다.
④ 추상 클래스에는 일반 메소드도 포함이 가능하다.
1234567891011121314151617181920212223abstract class AbstractS2{abstract void m1(); // 추상 메소드void m2(){ // 일반 메소드System.out.println("2. 메소드 ");}}class AChild extends AbstractS2{ // Abstract Childvoid m1(){ // 추상 메소드 오버라이딩 ( 재정의 / 덮어쓰기)System.out.println("1. 추상 메소드 오버라이딩 ");}}class User{public static void main(String[] args){AbstractS2 as2 = new AChild();as2.m1();as2.m2();}}cs ⑤ Constructor ( 생성자 ) 앞에는 붙을 수 없다.
Constructor ( 생성자 ) 는/은 왜 안될까? < Constructor 는 Overriding 이 되지 않는다. >
⑥ 추상 클래스 객체는 완변한 자식 클래스를 만들어 그 객체를 형변환 하여 생성한다.
⑦ static abstract 를 함께 사용할 수 없다.
12345678910111213141516171819abstract class AbstractS4{static abstract void m1(); // static 과 abstract 는 동시에 사용할 수 없다.void m2(){System.out.println("2. 메소드 ");}}class AChild extends AbstractS4{ // 완벽한 자식 생성void m1(){System.out.println("1. 추상메소드 오버라이딩");}public static void main(String[] args){AbstractS4 as4 = new AChild();as4.m1();as4.m2();}}cs error : illegal combination of modifiers : abstract and static
static abstract void m1();
에러 : 제한자의 불법적인 ( 잘못된 ) 조합 : 추상 제한자와 소유 제한자
e반응형'Language > Java' 카테고리의 다른 글
[JAVA 29] 자바 오버라이딩 ( Overriding ) (0) 2018.02.14 [JAVA 28] 자바 식별자 ( Identifier ) (0) 2018.02.14 [JAVA 29] 자바 ③ 수정 제한자 ( final ) (0) 2018.02.14 [JAVA 26] 자바 ② 소유 제한자 ( static ) (0) 2018.02.14 [JAVA 25] 자바 ① 접근 제한자 ( Access Modifier ) (public / protected / default / private) (0) 2018.02.13