인스턴스(instance)
- 인스턴스는 일반적으로 실행 중인 임의의 프로세스, 클래스의 현재 생성된 오브젝트를 가리킨다.
- 객체(오브젝트)의 인스턴스는 데이터베이스나 SGA, 백그라운드 프로세스등 광범위한 컴퓨터시스템 자원의 접근에 할당된 물리 메모리의 일부를 가리킨다.
- 테이블 인스턴스(또는 데이터베이스 인스턴스): 데이터베이스 설계의 개념. 로우 (데이터베이스) 문서 참고.
- 종종 컴퓨터나 수학 등에서 인스턴스는 사전적 의미로서 일반적인 경우에 대한 실제적인 특정 상황으로 실현된 경우이다. 즉 실질적 예이다.
수업
Has-a
- 가지고 있다
- 대표 : String Class
ex) 강사가 텀블러를 가지고 있다
상속
: is-a 관계 ( is-like a)
- 자바는 100% 상속구조로 구성이 되어 있다.
- 재사용성, 확장성
- 상속 해주는 클래스 super class → sub class에 공통된 부분을 정의 (중복을 최소화)
- 상속 받는 클래스 sub class
- 모든 객체는 Object 객체를 상속받고 있다
- 자바는 다중상속이 안된다. (객체끼리는)
- extends
public class ExtendsExam extends A {
// public class ExtendsExam extends Object { //자바 최상위 클래스가 오브젝트
//모든객체는 오브젝트를 상속받고 있다
public static void main(String[] args) {
ExtendsExam ex = new ExtendsExam();
System.out.println(ex.toString());
}
}
super 개념
class AAA{
int a;
public AAA() {
System.out.println("super");
}
public AAA(int a) {
System.out.println("super1");
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
}
public class ExtendsExam extends AAA {
// public class ExtendsExam extends Object { //자바 최상위 클래스가 오브젝트
//모든객체는 오브젝트를 상속받고 있다
public ExtendsExam() { //서브클래스
//super(); super 호출 부모의 생성자를 호출 > AAA는 클래스이름이라서 못부름( static만 부를수 있다~ ), super()로만 사용할 수 있음
//항상 생성자 첫번째 라인에 존재
// super();
super(1);
System.out.println("sub");
}
public static void main(String[] args) {
ExtendsExam ex = new ExtendsExam();
System.out.println(ex.getA());
}
}
**super 위치도 중요함!
** 생성자를 사용한다는 말 > 객체를 만든다는 뜻
- super ex)
class B1 {
int a1;
public B1(int a) {
a1 = a;
}
public int getA1() {
return a1;
}
public void setA1(int a1) {
this.a1 = a1;
}
}
class B2 extends B1{
int a2;
public B2(int a, int b) {
super(a);
a2 = b;
}
public int getA2() {
return a2;
}
public void setA2(int a2) {
this.a2 = a2;
}
}
class B3 extends B2{
int a3;
public B3(int a, int b, int c) {
super(a,b);
a3 = c;
}
public int getA3() {
return a3;
}
public void setA3(int a3) {
this.a3 = a3;
}
}
public class InExam extends B3 {
int a4;
public InExam(int a,int b,int c,int d) {
super(a, b, c);
a4 = d;
}
public int getA4() {
return a4;
}
public void setA4(int a4) {
this.a4 = a4;
}
public static void main(String[] args) {
InExam in = new InExam(1,2,3,4);
System.out.println(in.getA1()); //1
System.out.println(in.getA2()); //2
System.out.println(in.getA3()); //3
System.out.println(in.getA4()); //4
}
}
다형성을 대표하는 것
오버라이딩
동적바인딩
오버라이딩 ⇒ 다형성
: 상속관계일 때, 부모의 메소드와 자식의 메소드가 똑같은 형태로 존재하는 방식
(사용이유) 부모의 멤버 중 서브클래스에서 재정의하고자 할 경우
동적 바인딩시 코드의 유연성을 주기 위해서
this. vs super.
부모꺼 사용할 때 super. 붙여야한다.
class CCC{
public void disp() {
System.out.println("CCC");
}
}
public class OverridingExam extends CCC {
public void disp() {
super.disp(); <<<
System.out.println("OverridingExam");
}
public static void main(String[] args) {
OverridingExam over = new OverridingExam();
over.disp();
}
}
>>> CCC
>>> OverridingExam
참고
class CCC{
public void disp() {
System.out.println("CCC");
}
}
public class OverridingExam extends CCC {
public void disp() {
super.disp();
System.out.println("OverridingExam");
}
public String toString() {
return "superman";
}
public static void main(String[] args) {
OverridingExam over = new OverridingExam();
System.out.println("23".toString()); // >>> 23
System.out.println(over.toString()); // >>> superman
over.disp();
}
}
추상클래스
- 아직 구체화가 덜된 클래스
- 객체를 생성할 수 없다. 예외적으로 익명이나 클래스를 통해 객체를 구현할 수 있다
- 오직 상속을 목적으로 함
- 상속받은 서브클래스도 자동으로 추상클래스화가 되서 객체를 생성할 수 없다.
- 상속받은 서브클래스는 추상화된 부분을 구체화해서 객체를 생성해야한다. (강제성발생)
: 추상메소드를 하나이상 가지고 있는 클래스
**강제성을 부여할 수 있다 (= 동적바인딩을 ~)
참고
abstract class Test01{
abstract public void disp();
}
public class AbsClass extends Test01{
public static void main(String[] args) {
}
@Override //상징적인 부분
public void disp() {
// TODO Auto-generated method stub
}
}
'Java' 카테고리의 다른 글
자바의 정석 [Ch.08] 5 (1) | 2024.01.24 |
---|---|
자바의 정석 [Ch.07] 4 (0) | 2024.01.24 |
자바의 정석 [Ch.06] 2 (0) | 2024.01.24 |
자바의 정석 [Ch.01 ~ Ch.05] 1 (1) | 2024.01.24 |