상세 컨텐츠

본문 제목

2023.05.04

Java

by 연을 2023. 5. 4. 17:32

본문

728x90

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 = 클래스명

class

전역변수 / 멤버변수 확인?

[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;
	}
	
	
}

 

728x90

'Java' 카테고리의 다른 글

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

관련글 더보기