implements = 구현 (다중가능), 컴파일러에서 걸러줌
extends = 상속 (무조건 하나만 가능), JVM에서 걸러줌
![]() |
|
<< >> : interface를 뜻한다 | |
![]() |
body가 없는 상속 extends |
![]() |
상속 extends |
![]() |
구현 implements |
<Thread >
[A]
package Thread;
public class A extends Animal implements Runnable{
private C c;
A(C c){
this.c=c;
}
@Override
public void run() {
for(int i=0;i<100;i++) {
System.out.println("A - "+c.getI());
c.setI(100);
try {
Thread.sleep(100);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
[B]
package Thread;
public class B extends Thread implements Animal2{
private C c;
B(C c){
this.c=c;
}
@Override
public void run() {
for(int i=0;i<100;i++) {
System.out.println("B - "+c.getI());
c.setI(0);
try {
Thread.sleep(100);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
[C]
package Thread;
public class C {
private int i=0;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}
[Simulator]
package Thread;
public class Threadsimulator {
public static void main(String[] args) {
C c = new C();
Thread a = new Thread(new A(c)); //Runnable를 선언을 해주는것
Thread b = new B(c);
a.start(); //Thread에 있는 함수 start()
b.start();
}
}
[결과]
A - 0
B - 0 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 A - 0 B - 100 |
[class]
class = 객체를 위한 설계도 & 자기자신을 위한 설계도
Human = 클래스명
전역변수 / 멤버변수 확인?
[cat]
package Abstract;
public class cat extends mammalia implements Runnable{
private move m;
public cat(move m) {
setName("렉돌");
this.m=m;
}
// public void catKneading() {
// System.out.println(getName()+" is cat kneading");
// }
@Override
public void run() {
int distance = m.random();
while(distance<=500) {
System.out.println(this.getName()+" "+m.getI()+" 이동하였습니다.");
try {
Thread.sleep(100);
}catch(InterruptedException e) {
e.printStackTrace();
}
distance = m.random();
}
}
}
[dog]
package Abstract;
public class dog extends mammalia implements Runnable{
private move m;
public dog(move m) {
setName("사모예드");
this.m=m;
}
public void barks() {
System.out.println(getName()+" is barks");
}
@Override
public void run() {
int value = m.random();
while(value<=500) {
m.random();
System.out.println(getName()+" "+m.getI()+" 이동하였습니다");
try {
Thread.sleep(100);
}catch(InterruptedException e) {
e.printStackTrace();
}
value = m.random();
}
System.out.println(this.getName()+" "+value);
}
}
[move]
package Abstract;
public class move {
private int i;
public move() {
i=0;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public int random() {
return i += (int) (Math.random() * 50) + 1;
}
public int getDistance() {
return i;
}
}
[AnimalSm]
package Abstract;
public class AnimalSm{
public static void main(String[] args) {
// TODO Auto-generated method stub
// dog dog = new dog("chiwawa");
// dog.barks();
// dog dog1 = new dog("samoyed");
// dog1.barks();
// System.out.print(dog1.getName());
// dog1.eat();
//
//cat cat = new cat("ragdoll");
// cat.catKneading();
// cat cat1 = new cat("munchkin");
// cat1.catKneading();
//
// mouse mouse = new mouse("mouse");
// mouse.nocturnal();
move m1 = new move();
move m2 = new move();
Thread a = new Thread(new cat(m1));
Thread b = new Thread(new dog(m2));
a.start();
b.start();
try {
a.join();
b.join();
}catch(InterruptedException e) {
e.printStackTrace();
}
int distance1 = m1.getDistance();
int distance2 = m2.getDistance();
if(distance1>distance2) {
System.out.println("렉돌이 이겼습니다.");
}else if(distance2> distance1) {
System.out.println("사모예드가 이겼습니다.");
}else {
System.out.println("무승부입니다.");
}
// final int endPoint = 10; // 끝 지점
// final int middlePoint = 5; // 중간 지점
// int position1 = 0;// 캐릭터의 위치
// int position2=0;
//
// System.out.println("Game Start.");
// while (position1 < endPoint && position2 < endPoint) {
// // 캐릭터를 이동시키기 전에 현재 위치를 출력합니다.
// System.out.println("Current location " +cat.getName()+" : "+position1 +", "+dog1.getName()+" : "+ position2);
//
// // 중간 지점에 도달한 경우, 메시지를 출력합니다.
// if (position1 >= middlePoint) {
// System.out.println(cat.getName()+" passed the halfway point!");
// }else if(position2 >= middlePoint) {
// System.out.println(dog1.getName()+" passed the halfway point!");
// }
//// else if(position1 == middlePoint || position2 = middlePoint) {
//// System.out.println(cat.getName()+dog1.getName()+" passed the halfway point!");
//// }
//
// // 캐릭터를 이동시킵니다.
// position1 += (int)(Math.random() * 3) + 1;
// position2 += (int)(Math.random() * 3) + 1;
//
// // 사용자에게 입력을 받습니다.
// Scanner scanner = new Scanner(System.in);
// System.out.print("Hit enter to continue.");
// scanner.nextLine();
// }
//
// // 끝 지점에 도달한 경우, 성공 메시지를 출력합니다.
// if (position1 >= endPoint && position2 <= endPoint) {
// System.out.println(cat.getName()+" has reached the end point. WIN!");
// }
// else if (position2 >= endPoint && position1 <= endPoint) {
// System.out.println(dog1.getName()+" has reached the end point. WIN!");
// }
}
}
[mammalia]
package Abstract;
abstract class mammalia implements mammaliamove{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2023.05.09 [제너릭] (0) | 2023.05.09 |
---|---|
2023.05.08 [다차원배열&override] (0) | 2023.05.08 |
2023.05.03 (0) | 2023.05.03 |
2023.05.02 (0) | 2023.05.02 |
2023.05.01 (0) | 2023.05.01 |