0831 java

정혜지·2022년 10월 5일

2022.08.31

package step02.oop;

class Parent2 extends Object{
String name;
int age;

Parent2(){
	super();
}

void printAll() {
	System.out.println(name);
	System.out.println(age);
}

}

public class Child2 extends Parent2{
String wish;

public Child2() {
	super();
}

// 메소드가 오버라이딩
void printAll() {
	super.printAll();
	System.out.println(wish);
}

// 다형성 적용 메소드
static Object toDo() {
	return "Study";
}

static Object toDo2() {
	return "Study,Exercise,Cleaning,Sleeping";
}

public static void main(String[] args) {
	// y만 출력하기 : toDo() 메소드 이용

	
	// Study 문자열을 char[] 배열로 저장하여 출력하기 개발
	/* 단계
	 * step1
	 * 	- toDo2() 반환값을 , 를 기준으로 String[] toDoLists 배열에 저장
	 * 	- 반환값 -> 변환(String) -> 배열로 변환
	 * 
	 * hint : charAt()/length()/split()
	 * 
	 * step2
	 * 	- toDoLists 첫번째 index에 저장된 Study이라는 문자열을 
	 * 	  새롭게 생성한 char[] cArray 배열에 저장 후 출력
	 */
	
	// step1
	/* step1의 결과값
	 *  
	 * Study
	   Exercise
	   Cleaning
	   Sleeping
	 * 
	 */
	System.out.println("=======step1 결과값=======");

	// step2
	/* step2의 결과값
	 * 
	 * S	
     * t	
	 * u	
	 * d	
	 * y	
	 */
	System.out.println("=======step2 결과값=======");
	System.out.println("===String[]의 첫번째 데이터 값으로 char[]에 저장하기===");

	
	System.out.println("===저장된 char[] 데이터값 출력해 보기===");

}

}

// 주석의 의미로 컴파일러에게 특별한 정보를 제공
/* - 종류
 * 	@Override : 재정의된 메서드
 *  반환타입 메소드명 argument list는 100% 동일
 *  @FunctionalInterface : 함수영 인터페이스
 *  @Deprecated : 이후 버번에서 사용되지 않을 수 있는 변수, 메서드
 *  @SuppressWarnings : 특정 경고 제외
 * 
 */

// Instanceof
class A {}
class B extends A {}
class C extends A {}

public class Instanceof {
public static void main(String[] args) {
A b1 = new B();
A c1 = new C();
A a1 = new A();

// System.out.println(b1 instanceof A); //
// System.out.println(b1 instanceof B); //
// System.out.println(b1 instanceof C); //
//
// System.out.println();

// System.out.println(c1 instanceof A); //
// System.out.println(c1 instanceof B); //
// System.out.println(c1 instanceof C); //
//
// System.out.println();

	B b2 = new B();
	System.out.println(b2 instanceof A); //    
	System.out.println(b2 instanceof B); // 

// System.out.println(b2 instanceof C); // 에러 : 상속 관계에 있는 대상 객체들에 한정하여 사용
}
}

  1. 추상 클래스(Abstract Class)

    • abstract 명령 키워드 사용

    • 메서드의 선언만 있는 추상 메서드를 포함한 클래스
      예) int add(int x, int y)

    • new 사용 불가능

    • 응용 : 템플릿 메서드 패턴
      코드의 시나리오를 정의하는 메서드
      final로 선언하여 하위 클래스에서 재정의 할 수 없게 함
      프레임 워크에서 많이 사용하는 설계 패턴
      상위 클래스에서 전체 흐름을 정의 한 뒤 하위에서 다르게 구현하도록 함

    • 장점 : 통일화된 사용 방법 제안 가능

  1. 인터페이스

    • interface 명령 키워드 사용
    • 모든 필드는 public static final
    • 모든 메소드는 public abstract
    • 다중 상속이 가능*
    1. 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화가 가능합니다.
    2. 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간을 단축할 수 있습니다.
    3. 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능합니다.

/* 값 비교

    1. 기본타입
  • - ==
    1. 참조타입
  • - == : 주소값 비교
  • - equals() : 
  • 		
    1. String의 equals()
  • - Object 클래스의 주소값 equals() 재정의 -> 서로 다른 객체라도 데이터 값을 비교
    1. java.lang.Object의 equals()
  • - public boolean equals(Object o){
  •   	객체의 주소값을 비교
  • 	return true or false;
  • }
    */

class Person {
String name;
int age;

public Person(String name, int age) {
	this.name = name;
	this.age = age;
}

}

class Person2 {
String name;
int age;

public Person2(String name, int age) {
	this.name = name;
	this.age = age;
}

}

public abstract class Car {

public abstract void drive();
public abstract void stop();

public void startCar() {
	System.out.println("시동을 켭니다.");
}

public void turnOff() {
	System.out.println("시동을 끕니다.");
}
		
final public void run() {
	startCar();
	drive();
	stop();
	turnOff();
}

}

}

profile
오히려 좋아

0개의 댓글