OOP(Object Oriented Programming)

: Encapsulation, Inheritance, Polymorphism 의 특징을 가진다.

1. Encapsulation

내부 구현을 숨기고 사용자에게 인터페이스만 제공.

2. Inheritance

클래스를 상속받아 만들어지는 것이 자식 클래스. 코드의 재사용성, 확장성을 높여준다.

  • 기존에 만들어진 클래스의 기능을 확장해서 사용하는 개념 (extends 사용)
  • 다중 상속이 불가능하다. (extends mother, father)
  • 접근 지정자 (private < protected < (default) < public)
    • public 멤버가 상속된다.
    • private, 생성자는 상속이 안된다.
  • 항상 최상위 클래스가 상속된다.
  • super()은 자식 클래스의 생성자 안에서 사용가능, 반드시 첫줄에
  • 클래스 앞 final 키워드가 붙어있으면 상속을 할 수 없다.
  • object가 최상위 클래스다
  • is-a 관계(extends로 되어있는 것). 자식은 부모다. 자식은 오브젝트다.
final class MyClass{
 String name;
}

class MySon extends MyClass{
	//오류 : MyClass가 final이라서 상속할 수 없다.
}

막간 final 지식 : 상수(멤버 변수), 상속제한, 지역변수로 쓸 때 값을 못바꾸게.(메소드 안에서)

오류 나는 이유, JVM이 상속받은 객체 생성시, 내부적으로 부모부터 생성, 그다음에 자식객체를 생성한다. 그래서 JVM 이 super();이라는 메쏘드를 호출하는데, 부모 클래스에는 arg가 없는 생성자가 없어서 오류가 뜬다.

해결 1) super(x); 이렇게 넣어서 JVM이 기본 생성자를 자동으로 만들지 못하게 한다.

해결 2) 부모클래스에 public Parent(){} 이렇게 기본 생성자를 명시적으로 넣어준다.

3. Polymorphism

오버 라이딩 :

  • 부모에서 상속받은 메쏘드를 재정의해 사용.

  • 이름이 같아야하고, 전달인자도 같아야한다.
  • 접근 지정자는 달라도 된다. 부모보다 같거나 커야한다.

equals(); toString(); getClass(), notify(), wait()

println 하면 자동으로 toString 이 리턴하는 그 스트링을 보여준다.

다형적 변수

자식 클래스의 객체를 부모클래스에 대입.

다형적 변수는 접근 범위가 부모 클래스로 제한되며, 자식 클래스의 멤버에 접근 불가하다. 그러나 오버라이딩을 하고 나면 다형적 변수

라도 자식 클래스의 메소드가 호출된다.

Parent p = new child();

a instanceof b --> a가 b의 인스턴스니? b가 a의 상위클래스여야한다.

abstract class

[modifier] abstract class class_name{}

abstract 붙이면 상속을 위한 클래스

abstract method가 없어도 abstract 클래스로 선언할 수 있다.

abstract method

[modifier] abstract returnValue methodName(arg);
public abstract String Info();

클래스 내에 일부 메소드가 구현되지 않고 인터페이스만을 가진 형태의 메소드로 포함되어있을 때

abstract 한 메소드가 없어도

오버라이딩을 강제할 수 있다.

추상메소드가 있는 클래스는 반드시 추상 클래스로 선언을 해줘야한다.

public abstract void output(); //시그니처만 존재한다.

© 2018. All rights reserved.

Powered by Hydejack v8.5.2