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); // 에러 : 상속 관계에 있는 대상 객체들에 한정하여 사용
}
}
추상 클래스(Abstract Class)
abstract 명령 키워드 사용
메서드의 선언만 있는 추상 메서드를 포함한 클래스
예) int add(int x, int y)
new 사용 불가능
응용 : 템플릿 메서드 패턴
코드의 시나리오를 정의하는 메서드
final로 선언하여 하위 클래스에서 재정의 할 수 없게 함
프레임 워크에서 많이 사용하는 설계 패턴
상위 클래스에서 전체 흐름을 정의 한 뒤 하위에서 다르게 구현하도록 함
장점 : 통일화된 사용 방법 제안 가능
인터페이스
/* 값 비교
- ==- == : 주소값 비교- equals() : - 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();
}
}
}