Java13

ONLY·2022년 11월 14일
0

Java_질의응답

목록 보기
13/14

1. Object 클래스

모든(All) 클래스는 Object 클래스를 상속한다.(Object 클래스는 모든 클래스의 조상)

subclass는 Object 클래스를 직접 상속 하지는 않지만 간접적으로 결국은 Object 클래스를 상속하게 된다.

= Object 클래스를 사용할 수 있다

2. 문제01

아래에서 주소가 출력되는 이유를 순차적으로 설명하시오.

class A{
}
public class Test {
	public static void main(String[] args) {
		A a = new A();
		System.out.println(a); 
	}
}

1)

이렇게 의미 없는 값이 출력되지 않도록 Object class의 String toString()함수를 override 하면 Object의 자식 클래스인 class A의 tring toString() 함수가 호출된다.

2)

println()함수가 객체 이름을 매개 변수로 받아서 toString()을 호출할 수 있도록 overload되어 있기 때문에 a.toString을 붙이지 않아도 위의 문제와 같이 원하는 문자열이 출력되는 결과를 얻을 수 있다.

3. .class이름 및 함수에서 final의 의미

1) final class

클래스가 마지막이다 → 더 이상 다른 클래스가 상속할 수 없다.

2) final mehod

함수가 마지막이다. → 다른 클래스에서 overriding 할 수 없다.

4. interface 와 class

1) interface

  • interface + interface명 ();
  • implements 키워드로 인터페이스를 구현할 (자손)클래스 표시
  • 둘 이상의 다중 인터페이스 구현 가능 (implements A, B 쉼표로 구분)
  • body가 없으므로 객체 생성 불가, 선언 혹은 구현만 가능함
  • 무조건 public 이어야 한다.
  • 이름은 -able 혹은 I+이름으로 짓는 것이 관례

2) class

  • class + class명 () {body}
  • extends 키워드로 상속 표시함
  • 단일 상속만 가능함 (자식이 상속) / 다중 상속 안됨
  • 객체 생성 가능

interface와 class를 동시에 상속, 구현 가능

5. 문제02

다음을 프로그램 하시오.

interface Printable { // MS가 정의하고 제공한 인터페이스
	public void print(String doc);
}
	//SPrinterDriver 와 LPrinterDriver를 만드시오
	public static void main(String[] args) {
		String myDoc = "This is a report about...";
		// 삼성 프린터로 출력
		Printable prn = new SPrinterDriver();
		prn.print(myDoc);
		System.out.println();
		// LG 프린터로 출력
		prn = new LPrinterDriver();
		prn.print(myDoc);
	}
package java_1214;

interface Printable { // MS가 정의하고 제공한 인터페이스
	public void print(String doc);
}

class SPrinterDriver implements Printable {
	public void print(String doc) {
		System.out.println("From Samsung printer");
		System.out.println(doc);
	} 
}
	
class LPrinterDriver implements Printable {
	public void print(String doc) {
		System.out.println("From LG printer");
		System.out.println(doc);
	} 
}

public class PrintInterfaceEx {
	//SPrinterDriver 와 LPrinterDriver를 만드시오
	public static void main(String[] args) {
		String myDoc = "This is a report about...";

		// 삼성 프린터로 출력
		Printable prn = new SPrinterDriver();
		prn.print(myDoc);
		System.out.println();

		// LG 프린터로 출력
		prn = new LPrinterDriver();
		prn.print(myDoc);
	}

}

6. @Override

오버라이딩 하라고 좀 더 명확하게 개발자들에게 알려주는 것 컴파일시 에러 등을 발생시켜 경고나 확인을 하는 목적으로 사용한다. → 안전성을 위한 것

@Override 는 현재 메소드가 부모 클래스의 메소드를 오버라이드 한 것임을 컴파일러에게 명시하고, 부모 클래스에 해당하는 메소드가 없다면 에러를 발생시킨다.

7. interface

인터페이스는 표준이자 규약이다. (함수명도 규약이 됨. 강제시킴 = 표준화)

  • 인터페이스를 사용하면 함수 선언부를 정의해주고 있어서 그 규약에 맞게 각각의 회사가 맞춰서 구현을 하게되므로 관리에 용이하다.

선언부분과 구현부분을 분리시켜 독립적으로 프로그램을 작성할 수 있다. (외주)

세부 정보를 숨기고 인터페이스를 통해 중요한 정보만 표시해서 보안을 확보할 수도 있다.

interface Printable {    
	public void print(String doc); // 추상 메소드(=함수정의, 선언만)
   //(abstrct 생략 가능)인터페이스 무조건 public, abstract 함수
}

interface Printable {
	public static final int PAPER_WIDTH = 70;  //상수
	public static final int PAPER_HEIGHT = 120;  
	public void print(String doc);
  //무조건 public static final 이어야 함(생략가능: 컴파일러가 붙여줌)
}

8. abstract

추상의 의미. abstract 키워드는 생략 가능(컴파일러 자동 생성)

인터페이스 내에 있는 함수의 body부분이 없고 선언 부분만 있기 때문에 구현은 자손 클래스에서 해야한다.(자손이 구현)

그렇기 때문에 인터페이스는 객체를 만들 수 없다.

9. 문제03

아래의 출력 결과가 아래와 같이 나오도록 프로그래밍 하시오.

Object obj = new Circle(10);
System.out.println(obj); //출력: 넓이는 100 입니다. (예시)
public class Fuck extends Object{

	public static void main(String[] args) {
		Object obj = new Circle05(10);

		System.out.println(obj); 
	}
		
}

class Object {
	double getArea() {
		return 0.0;
	}
}

class Circle05 extends Object {
	
	@Override
	public String toString() {
		return "넓이는 " + r*r*Math.PI + "입니다";
	}
	
	public Circle05(int r) {
		super();
		this.r = r;
	}

	int r;
	
	public double getArea() {
		return r*r*Math.PI;
	}
}

0개의 댓글