달력

1

« 2026/1 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2017. 7. 2. 21:36

java 자바 인터페이스 C. Java2017. 7. 2. 21:36

interface와 abstract클래스는 공통점

----------------------------------------------------------------------------------------
1. 자식클래스에게 상속됨으로서 사용이 가능합니다.
2. 자식클래스에게 자신의 추상 메소드를 구현하도록 강제를 합니다.

 


interface와 abstract클래스는 차이점
----------------------------------------------------------------------------------------
1. abstract클래스는 구현된 메서드와 구현되지 않은 메서드를 둘다 가질 수 있습니다.
    단, 구현되지 않은 메서드가 하나 이상 존재해야만 abstract클래스라는거죠..
2. interface는 메소드에 대해서 정의만 할 수 있지 구현된 메서드는 포함 할 수가 없습니다.
    자식클래스들이 공통된 메서드를  포함하도록 하는 기능만 하죠
3. 자바에서 abstract클래스나 일반 클래스나 전부 extends 키워드로는 하나 만 상속 받을 수 있습
    니다. 한번에 여러개의 부모를 상속받을 수가 없죠.
   

그래서 나온것이 interface입니다. interface는 여러개를 상속 받을 수 있습니다.


추상클래스 -> 클래스이다.
                     일반 메서드와 추상 메서드를 모두 가질수 있다.
                     확장을 하며 extends로 서브 클래스 정의
                     단일 상속만 가능하다.
                     변수와 상수 모두 가질수 있다.
                     모든 추상메서드는 서브 클래스에서 반드시 구현되어야 하며 업캐스팅이 가능하다.

인터페이스 -> 클래스가 아니다. (interface 선언)
                     public abstract 추상메서드만 가질 수 있다. 일반메서드는 가질수 없다.모든 메서드는 내부적으로 모두 public
                     서브클래스에서 implements 구현
                     다중상속이 가능하다.
                     public static final형태의 상수만 가질수 있다.
                     인터페이스에서 모든 메서드는 묵시적으로 abstract이다
                     
모든 추상메서드는 서브 클래스에서 반드시 구현되어야 하며 업캐스팅이 가능하다.

 

 

ex)  interface IHello { void sayHello(string name); }        
       // 인터페이스 선언 (메서드 앞에  public abstract 이 묵시적으로 선언되어 있다.)

       class Hello implements IHello{
              public void sayHello(String name) { System.out.println(name + "헬로"); } 
              //public를 생략하면 에러!! 인터페이스에서 메
소드는 자동적으로 public으로 지정되기
                때문에

       }

       class IhMain {
              public staic void main(String[] args){
                      Hello obj = new Hello();
                      obj.sayHello
              }
       }

 

ex) 인터페이스 다중 상속 예제

interface IHello { public abstract void sayHello(String name); }

interface IBye { public abstract void sayBye(String name); }

//두 인터페이스로부터 상속을 받는 클래스 설계

class subC implement IHello, IBye {
         public void sayHello(String name){ System.out.println(name + "헬로"); }
         public void sayBye(String name)  { System.out.println(name + "잘가"); }
}

class subMain{
     punlic static void main(String[] args){
         subC  test = new subC();
         test.sayHello(args[0]);
         test.sayBye(args[0]); 
    }
}

ps. 인터페이스도 상속이 가능하다.

      => interface A {public abstact  a메소드;}
            interface B {public abstact  b메소드;}
            interface C extends A,B {public abstact  c메소드 }

            class subC implement C {
                                                      public a메소드 오버라이딩;
                                                      public b메소드 오버라이딩;
                                                      public c메소드 오버라이딩;           
             }

             class subMain{
                 public staic void main(String[] args){
                      subC obj = new subC();
                      obj.a메소드;
                      obj.b메소드;
                      obj.c메소드;
                }    
             }

 

 


'C. Java' 카테고리의 다른 글

정적 중첩 클래스  (0) 2017.07.02
중첩 클래스  (0) 2017.07.02
아스키 코드표  (0) 2017.07.02
JVM (java virtual machine) 구조  (0) 2017.07.02
java 자바 객체생성  (0) 2017.07.02
:
Posted by sfeg