자바 접근제어자와 상속/ 1초씩 증가하는 함수

조수경·2021년 9월 30일
0

JAVA

목록 보기
16/26

접근제어자😒🤔

 package g_oop2;

 public class AccessModifier {

public String publicVar = "public: 접근제한이 없음";

  //다른 패키지에서도 접근이 가능함

protected String protectedVar

= "protected: 같은 패키지 + 상속받은 클래스에서 접근 가능";

String defaultVar = "default : 같은 패키지에서만 접근 가능";

  //생략해야 default

private String privateVar = "private: 클래스 내에서만 접근 가능";

  //오직 이 클래스 안에서만

  public void publicMethod(){
      System.out.println(publicVar);
  }


  protected void protectedMethod(){
      System.out.println(publicVar);
  }


   void defaultMethod(){
      System.out.println(publicVar);
  }


   protected void privateMethod(){
      System.out.println(publicVar);
  }

   public static void main(String[] args) {
      AccessModifier am = new AccessModifier();
      //객체를 만듬 , 변수의 이름은 클래스의 대문자를 따서만듬

      System.out.println(am.publicVar);
      am.publicMethod();

      System.out.println(am.protectedVar);
      am.protectedMethod();

      System.out.println(am.defaultVar);
      am.defaultMethod();

      System.out.println(am.privateVar);
      am.privateMethod();

        접근제어자를 사용하는 이유
       - 데이터를 보호하기 위해
       - 사용하는데 불필요한 멤버를 숨기기 위해
        
      

      Time t = new Time();
      //객체를 출력하면 주소가 나와야 하는데 tostring으로 값이 출력함
  	
  	t.hour = 14;
  	t.miniute = 7;
  	t.second = -30; // 변수에 접근제어자를 붙여서 아무나 접근할수 없게 만듬

      t.setHour(14);
      t.setMiniute(7);
      t.setSecond(-30);


      System.out.println(t);

      t.clock();
  //	t.stop(); //부수적인 메서드로 숨겨 놓는게 나음


     }
  }

출력1

 package g_oop2;

 public class AccessTest {

 public static void main(String[] args) {
 //4가지와 접근 범위 암기하기
		AccessModifier am = new AccessModifier();
        //객체를 만듬 , 변수의 이름은 클래스의 대문자를 따서만듬

System.out.println(am.publicVar);
am.publicMethod();
System.out.println(am.protectedVar);
am.protectedMethod();
System.out.println(am.defaultVar);
am.defaultMethod();
// System.out.println(am.privateVar);
// am.privateMethod();

}
}

출력2

  package g_oop2.test;

  import g_oop2.AccessModifier;

  public class AccessTest extends AccessModifier { //상속

 public static void main(String[] args) {
		AccessModifier am = new AccessModifier();
        //객체를 만듬 , 변수의 이름은 클래스의 대문자를 따서만듬
		
		System.out.println(am.publicVar);
		am.publicMethod();
		
	//	System.out.println(am.protectedVar);
	//	am.protectedMethod();
		
   //	System.out.println(am.defaultVar);
   //	am.defaultMethod();
		
	//	System.out.println(am.privateVar);
	//	am.privateMethod();
		
   AccessTest at = new AccessTest(); // 상속 받은 클래스를 통해서 받아야함
   System.out.println(at.protectedVar);
   at.protectedMethod();
   
 //	   System.out.println(at.defaultVar);
//	   System.out.println(at.privateVar); //접근 제어자에 영향을 받음
   
   
 }
}

1초씩 증가하는 함수 만들기🤷‍♂️

package g_oop2;

public class Time {

private int hour;
private int miniute;
private int second;


public int getHour() {//변수의 값을 얻기 위해 (현재시간의 값)
	return hour	;
}


public void setHour(int hour) {
//변수의 값을 저장하기 위함/ 값을 받기 위해 파라미터도 있음
(AccessModifier에서 생성한 값이 들어옴)
	if(hour<0){
		this.hour = 0;
	}else if(23 < hour){
	this.hour = hour % 24;
	}else{
		this.hour= hour;
	}
	}



public int getMiniute() {
	
		return miniute;
	
}


public void setMiniute(int miniute) {
	if(miniute<0){
		this.miniute = 0;
	}else if(59<miniute){
		this.miniute = miniute % 60;
		setHour(this.hour + (miniute / 60));
	}else{
		this.miniute= miniute;
	}
	}


public int getSecond() {

	return second;

}

public void setSecond(int second) {
	if(second<0){
	this.second = 0;
      }else if(59<second){
//    	  this.second = 59;
	      this.second = second % 60;
	      setMiniute(this.miniute + (second / 60));
      }else{
	   this.second = second;
     }
   }

void clock(){// 1초에 한번씩 시간을 증가시키며 출력
	while(true){
		System.out.println(toString());
		stop();//시간을 멈추기위해
		setSecond(second + 1);//1을 더해주고 파라미터로 넘기기
	}
  }

private void stop(){
	try {
		Thread.sleep(1000);
	} catch (InterruptedException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} 
    //프로그램 잠시 멈추게 가능: 1초간 멈추게됨, 컴파일에러는 예외처리를 안해줘서 그럼
}

@Override // source - generate to string
public String toString() {
//오버라이딩 된 메서드(상속받은 메서드의 내용을 변경하기 위해 만든것)/ 
	//toString: 클래스의 객체가 문자열로 출력될때 자동으로 넣어줌
	return hour+":"+ miniute+":"+ second ;
}

}

profile
신입 개발자 입니다!!!

0개의 댓글