ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA 27] 자바 ④ 추상 제한자 ( abstract ) < 추상 메소드 / 추상 클래스 >
    Language/Java 2018. 2. 14. 15:12
    반응형


    4) 추상 제한자 ( abstract )

    (1) abstract 가 붙으면 추상화가 된다.

    (2) 특징

    ① Class 또는 method 앞에만 붙을 수 있다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    abstract class AbstractS1{        // abstract study 1
        
        abstract 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();
        }
    }


    cs



    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 가 붙은 메소드를 ' 추상 메서드 ' 라고 한다.

    ③ 하나 이상의 추상 메소드가 있다면 클래스는 반드시 추상 클래스가 되어야 한다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class 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() 이 오버라이딩(= 재정의) 되지 않았다.



    ④ 추상 클래스에는 일반 메소드도 포함 가능하다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    abstract class AbstractS2{          
        
        abstract void m1();                // 추상 메소드
     
        void m2(){                         // 일반 메소드
            System.out.println("2. 메소드 ");
        }
    }
     
    class AChild extends AbstractS2{     // Abstract Child
     
        void 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 를 함께 사용할 수 없다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    abstract 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


    반응형
Designed by Tistory.