여러 개의 독립된 단위 즉 객체들의 모임으로 파악하고자 하는 것
각각의 객체는 메시지를 주고 받고 데이터를 처리
관련된 필드와 메소드를 하나로 묶고 실제 구현 내용을 외부로부터 감추는 기법 (정보은닉)
만일의 상황을 대비해서
Scanner, Random, Arrays, Math
이미 작성된 클래스의 특성을 그대로 이어받아 새로운 클래스를 생성하는 기법
기존 코드를 재사용하거나 재정의 -> 재사용 + 확장 (하위클래스 일수록 구체화)
객체에서 공통된 속성과 행위를 추출하는 기법
상세한 정보는 무시하고 필요한 정보들만 간추려서 구성
다양한 형태로 나타날수 있는 능력
같은 기능을 호출하더라도 객체에 따라 다르게 동작하는 것
객체를 만들기 위한 설계도, 틀
==> 데이터 타입
public class Person{
}
Person ps = new Person();
ps.@@ ;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
Restaurant db = new Restaurant(); //객체를 생성하는 역할
public Restaurant() {
}
Restaurant db = new Restaurant();
//(기본 생성자)
생성자 특징
1. 리턴타입이 없다
2. 생성자의 이름은 클래스명과 동일하다
3. 객체를 생성할때만 호출된다
Restaurant db = new Restaurant("동부식당");
public Restaurant(String name) {
}
import java.util.ArrayList;
ArrayList<데이터 타입1> 변수명= new ArrayList<데이터 타입1>();
생성자는 자식생성자이지만 부모 데이터 타입으로 사용할 수 있음
==> 부모로의 형태변환 (업캐스팅)
상속에서 자식 클래스가 기본 생성자를 만나면 부모클래스를 방문한다
부모에 있는 메소드를 자식 클래스에서 재정의 하는 방법

객체는 다르지만 PBKRamen 으로 데이터를 묶어서 ArrayList에 데이터를 묶어 사용할수 있다
PHCRamen p = (PHCRamen)phc;
p.makeBingsu;
추상 메소드란 선언은 되어 있으나 코드가 구현되어 있지 않은 즉 껍데기만 있는 메소드

슈퍼 클래스에 선언된 모든 추상 메소드를 서브 클래스에서 오버라이딩하여 실행 가능한 코드로 구현하는 것

서로 다른 하드웨어 장치들이 상호 데이터를 주고받을 수 있는 규격
public interface RandomGame {
}
public class CelebrityGame implements RandomGame {
]
인터페이스는 스펙을 주어 클래스들이 그 기능을 서로 다르게 구현할 수 있도록 하는 클래스의 규격 선언이며 클래스의 다형성을 실현하는 도구