상세 컨텐츠

본문 제목

자바 기본기-1

개발생활/Java

by 한국인맛집 2020. 4. 12. 23:59

본문

반응형

추상 클래스

- 추상 메소드를 포함하는 클래스는 반드시 추상 클래스 여야 한다.

 

abstract public class Parent{
// 추상 메소드를 포함하면 반드시 추상클래스가 되야 한다.
	abastact public void getName();
	// 추상 메소드를 사용 
    // 상속받아 몸체를 구현해주어야한다.

}

- 자체적으로 객체생성은 불가

- 상속받아 몸체를 구현해주어야한다, 

 

인터페이스 (Interface)

 

-모든 메소드가 추상 메소드 이다.

-데이터는 클래스 상수만 가능( public staic final)

-default 메소드와 static 메소드는 몸체의 구현이 필요함

 

-자체적인 객체생성 불가

 

-인터페이스의 이름은 보통 형용사 형태.

 

  Runnable, Serializable, Comparable.

 

 

-정의할때 키워드 class -> interface를 사용한다.

-abstract 를 생략함.

 

-메소드 원형만 작성

 

-모든 필드는 자동으로 public static final 

 

추상클래스와 동일하게 자식클래스에 상속되어 사용된다

 

의미적으로 관련없으나 기능적으로 유사한 클래스들을 묶을때 사용할수 있음.

예) 대소비교가 가능한 객체들의 자료형을 묶을때,

 

인터페이스를 상속받아 확장가능

 

- 여러 인터페이스를 상속받는 다중상속 가능

단, 클래스는 단일 상속만 가능

 

 

A인터페이스가 다른 인터페이스를 상속받을때.

// extends (상속)
interface A extends interfaceB {...}

 

 

부모 인터페이스를 상속 받은 클래스  [구현]

class Node implements implements Tree{...}

 

기본 메소드

(Default Method)

 

인터페이스에서 선언하는 메소드에 기본 구현을 넣을수 있음.

 

default 를 사용하고, 몸체를 구현해 준다.

 

- 기존 코드의 수정을 피하기 위해 작성한다.

 

interface Node{

	void printNode();
	void AddNode();
    
    default boolean isNodethat(int data){
    	//...
    }

}

 

동적바인딩 : 상위 유형의 변수가 가리키는 객체의 실제 유형에 따라 수행되는 메소드가 결정됨

class Parent{
	void foo();
}

class Child extends Parent{
	void foo();
}


public static void main(String[] args){

	Parent p = new Child();
    child.foo();
    
    // Parent 타입의 인스턴스변수를 만들었지만 , 객체화 할때, child로 생성하였다.
    // Parnet 타입의 P 변수지만, Child 에서 오버로딩 된 foo 함수를 우선적으로 사용


}

 

 

다형성

 

하나의 객체가 다양한 형상이나 다양한 기능을 가진다는 뜻

- 클래스에서 오버로딩된 메소다들은 유사하지만 조금씩 다른 기능을 수행함.

 

 

Type Casting (형변환)

상속 관계가 있는 클래스 간에는 타입캐스팅이 가능함. (단 전혀다른 클래스 간에는 타입 캐스팅이 안됨.)

 

하위클래스에서 상위 클래스로 타입캐스팅 가능( upcasting) 업캐스팅 이라고 한다.

 

 

클래스의 다형성

부모 클래스로 부터 상속받은 메소드를 자식 클래스에서 Overiding 가능 

부모와 자식에서 같은 이름의 메소드가 다른 기능을 수행

 

같은 이름, 파라미터, 리턴타입을 (함수 원형 )가지나 바디가 다름

 

 

인터페이스의 다형성

자식클래스들에서 상위 인터페이스의 메소드를 다른게 구현함.

 

 

익명클래스

 

일회섬으로 1개의 객체를 생성하기 위한 클래스

 

클래스 정의와 동시에 객체생성이 가능

슈퍼클래스를 상속받거나 인터페이스를 구현하도록 익명 클래스를 정의

 

public class Once{
  void foo(){
  	System.out.println("HIHI");
  }
  
  void boo(){
  	System.outprintln("NONO");
  }
}

public static void main(){
	
    Once o = new Once(){
    	void foo(){
        	System.out.println("Yes I do");
        }
        
        void boo(){
        	System.out.println("Ok I do");
        }
    }; // 꼭 닫아 줘야함.
    
    o.foo();
    o.boo();


}

 

반응형

'개발생활 > Java' 카테고리의 다른 글

Java I/O , class -3  (0) 2021.09.26
Java Variable, Loop, Flow Control -2  (0) 2021.08.29
Java 개발환경 설정-1  (0) 2021.08.29
Java , c++ 철학 비교.  (0) 2017.12.02
ChattingClient작성.  (0) 2017.11.20
Java GUI  (0) 2017.11.10

관련글 더보기