Object 클래스 : 모든 클래스의 부모 클래스
package ch06;
//Object는 모든 클래스의 부모 클래스
class Dog{
String name = "토토";
}
class Cat{
String name = "야옹이";
}
public class ObjectEx01 {
public static void main(String[] args) {
Object o1 = new Dog(); // 다형성
Object o2 = new Cat();
Dog d1 = (Dog)o1; //다운캐스팅울 통해서 Dog에 접근할 수 있도록함
System.out.println(d1.name);
}
}
package ch06;
class 궁수{
String name = "궁수";
}
class 전사{
String name = "전사";
}
public class ObjectEx02 {
public static void main(String[] args) {
Object[] s1 = new Object[2];
s1[0] = new 궁수();
s1[1] = new 전사();
궁수 g1 = (궁수) s1[0];
전사 g2 = (전사) s1[1];
System.out.println(g1.name);
System.out.println(g2.name);
}
}
package ch06;
//경우에따라서 문자열을 담고, 숫자를 담고
class 바구니{
Object data;
}
//Object클래스를 사용
//문자열과 숫자는 다운캐스팅 필요 없어
public class GenericEx01 {
public static void main(String[] args) {
바구니 s1 = new 바구니();
s1.data = 1;
System.out.println(s1.data);
바구니 s2 = new 바구니();
s2.data = "문자열";
System.out.println(s2.data);
}
}
package ch06;
class 호랑이{
String name = "호랑이";
}
class 사자 {
String name = "사자";
}
//경우에따라서 호랑이 사자를 담음
class 큰바구니<T> {
T data;
}
//제네릭 : 타입이 정해져 있지 않을 때 제네릭을 사용 , 다운캐스팅 필요없다.
public class GenericEx02 {
public static void main(String[] args) {
큰바구니<호랑이> s1 = new 큰바구니<>();
s1.data = new 호랑이();
System.out.println(s1.data.name);
큰바구니<사자> s2 = new 큰바구니<>();
s2.data = new 사자();
System.out.println(s2.data.name);
}
}
package ch06;
abstract class 공{
abstract String getName();
}
class 농구공 extends 공{
private String name = "농구공";
//자식이 부모의 메서드와 동일한 것을 들고 있으면
// 부모의 메서드가 오버라이드된다.
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class 축구공 extends 공{
private String name = "축구공";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class 가방<T>{
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
public class GenericEx03 {
//와일드카드를 사용해서 어떤 클래스라도 반환할수 있도록 함
static 가방<? extends 공> 꺼내기(int time) { // 9시 => 축구 , 12시 => 농구
if(time == 9) {
System.out.println("축구공이 담겼어요");
축구공 g2 = new 축구공();//축구공하나 사기
가방<축구공> b2= new 가방<>();//축구공 가방 하나사기
b2.setData(g2); // 축구공을 가방안에 넣기
return b2;
}else {
System.out.println("농구공이 담겼어요");
농구공 g1 = new 농구공(); // 농구공 사기
가방<농구공> b1= new 가방<>(); // 농구공가방 사기
b1.setData(g1); //가방안에 농구공 넣기
return b1;
}
}
public static void main(String[] args) {
가방<? extends 공> r1 = 꺼내기(9);
가방<? extends 공> r2 = 꺼내기(12);
r1.getData().getName();
r2.getData().getName();
}
}
package ch06;
import java.util.ArrayList;
import java.util.Iterator;
public class CollectionEx01 {
public static void main(String[] args) {
//int double char boolean => 기본자료형(값)
//String,커스텀자료형(클래스) => 래퍼런스자료형(주소)
//래핑클래스 = Integer,Double ,Character , Boolean
ArrayList<Integer> c1 = new ArrayList<>();
c1.add(1);
c1.add(2);
c1.add(3);
//System.out.println(c1.get(0));
int size = c1.size();
//for문
for (int i = 0; i < size; i++) {
System.out.println(c1.get(i));
}
}
}
package ch07;
//SubThread -> Runnable (다형성)
class SubThread implements Runnable{
// 자바의 서브 스레드
@Override
public void run() {
for (int i = 1; i < 11; i++) {
try {
Thread.sleep(1000);
System.out.println("서브 스레드 : "+i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class ThreadEx01 {
//자바의 메인 스레드
public static void main(String[] args) {
SubThread st = new SubThread();
Thread t1 = new Thread(st); // 타겟 선정
t1.start(); // run 메서드 실행
for (int i = 1; i < 11; i++) {
try {
Thread.sleep(1000);
System.out.println("메인 스레드 : "+i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}