목록Java/객체지향 (41)
충분히 쌓여가는
(메서드)오버라이딩(overriding) 상속받은 조상의 메서드를 자신에 맞게 변경하는 것 오버라이딩 되지 않은 것 getLocation() 오버라이딩 되지 않음 class Point { // 2차원 int x; int y; String getLocation() { return "x :" + x + ", y :" + y; } } class Point3D extends Point { // 3차원 int z; } public class overrideTest { public static void main(String[] args) { Point3D p = new Point3D(); p.x = 3; p.y = 5; p.z = 7; System.out.println(p.getLocation()); } } x :..
Object 클래스 부모가 없는 클래스는 자동적으로 Object 클래스를 상속받게 된다 모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속받는다(toString(), equals(Object obj, hashCode()) 부모가 없는 클래스를 컴파일하면 extends Object 라는 것을 컴파일러가 자동으로 추가해준다 상속 계층도 toString() 메서드를 사용할 수 있는 이유 Object 클래스를 extends해서 가지고 있기 때문 c.toString()에서 toString()을 안붙이고 참조변수 c만 사용해도 된다(println() 메서드의 기능, 참조변수만 있으면 toString()를 호출함) class MyPoint extends Object { int x; int y; } cl..
단일 상속(Single Inheritance) java는 단일 상속만 허용한다 다중 상속 에러 예시 class TvDVD extends Tv, DVD { // 에러 발생 // ... } 다중 상속 문제점 TvDVD는 부모가 Tv와 DVD로 2개이다 Tv와 DVD에 void power() {}라는 메서드가 동시에 있을 경우 어떤 것을 상속 받아야하는지 알 수 없다 => 충돌 문제 [이름(power)이 같고 내용({ })이 다를 경우] 다중 상속 해결방법 1. 인터페이스 인터페이스의 다형성 2. 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다 Tv 클래스가 비중이 높은 경우, Tv 클래스는 상속으로, DVD 클래스는 포함관계로 한다 (단, DVD가 가지고 있는 메서드를 호출해줘야 한다)
클래스로 작성하는데 있어 상속관계를 맺어 줄 것인지 포함관계를 맺어 줄 것인지 결정하는 것이 어려울 수 있다 상속관계: A는 B이다 포함관계: A는 B를 가지고 있다 이전 글에서 사용한 Circle의 예를 들어보면 Circle(원)이라는 클래스가 Point(점)을 가지고 있다가 더 자연스럽기 때문에 포함관계라고 할 수 있다(대부분의 경우에 포함관계) 상속 class MyPoint { int x; int y; } class Circle extends MyPoint { // 상속 int r; } public class InheritanceTest { public static void main(String[] args) { Circle c = new Circle(); c.x = 1; c.y = 2; c.r =..