자바 기초(접근제어자)

4월 18일 내용정리-2

1.접근제어자
public>protected>default>private
순으로 접근 범위가 넓음.

(1)public->언제든 어디든지 끌어다가 쓸수 있음
(2)protected->같은패키지,같은클래스 끌어다 쓸수 있지만 다른패키지 클래스는 안됨. 단, 상속받은 자식클래스는 끌어다가 쓸수 있다.(즉, 다른패키지의 부모클래스는 안됨)
(3)default->only 같은패키지안에서만 가져다 쓸수 있음, 접근제어자 안쓰면 기본적으로 설정되는것
(4)private->only 같은클래스안에서만 끌어다 쓸수 있음.

*부모는 클래스보다 상속받은자식 클래스가 더 보안강화된 접근자는 쓸수 없다.

부모클래스

package study_0418;

public class exam01 {
	private int secret=1;
			int roommate=2;
	protected int child=3;
	public int anybody=4;
	
	public void show01() {
		System.out.println(secret);
		System.out.println(roommate);
		System.out.println(child);
		System.out.println(anybody);
	}
	
	public void show() {}
	
}

상속받은 자식 클래스

package study_0418;

public class exam02 extends exam01{
	
	public void show01() {
//		System.out.println(secret); private이라 같은 클래스안에서만 쓸수 있으므로 에러남 getter와 setter를 통해서 접근가능
		System.out.println(roommate);
		System.out.println(child);
		System.out.println(anybody);
	}
	
//	void show() {} 부모는 public 인데, 자식이 default가 되면서 부모보다 더 보안강화된 접근자는 쓸수 없다.
}

포함관계의 자식 클래스

package study_0418;

public class exam03 {
	void print() {
		exam01 exam = new exam01(); //포함관계 선언!
//	System.out.println(exam.secret); private이라 같은 클래스안에서만 쓸수 있으므로 에러남, getter와 setter를 통해서 접근가능
		System.out.println(exam.roommate);
		System.out.println(exam.child);
		System.out.println(exam.anybody);
	}
}

2.import문의 쓰임
다른 패키지를 불러와 쓸때
import 패키지이름.클래스;
또는
import 패키지이름. ;
-> 패키지이름밑에 있는 모든클래스를 불러온다.
단,import 패키지이름1.패키지이름2.

import 패키지이름1.* 는 경로가 다르므로 전혀다른 클래스를 불러올수가 있음.
패키지는 폴더같은 개념이라 보면됨

package study_0418_01;

import study_0418.exam01; //다른 패키지(study_0418)를 불러와서 요청한 class(exam01)를 사용하게 준비시켜줄께!

public class One extends exam01 { 
	void print() {
		
	//System.out.println(secret); private 접근자
	//System.out.println(roommate); default 접근자
	System.out.println(child); //protected 접근자 
	System.out.println(anybody);//public 접근자
	
	}

}

다른 패키지 import문으로 불러오기

package study_0418;

import study_0418_01.One; //다른 패키지의 클래스를 쓸수 있게 준비 시켜줄께!

public class One_Test {

	public static void main(String[] args) {
		One o= new One(); 
		
//		System.out.println(o.secret);  private 접근자 같은 패키지와 같은 클래스에서만
//		System.out.println(o.roommate); default 접근자 같은패키지에서만
		System.out.println(o.child); //protected 접근자 같은패키지 + 다른 패키지 상속받은 자식클래스
		System.out.println(o.anybody); //public 접근자 어디든 상관없음

	}

}

3.final이 붙은 class는 상속을 받는건 상관없지만
상속해주는 부모클래스는 될수 없다.
final이 붙으면 오버라이딩을 할수없다.

4.static은 객체생성 이전에 먼저 메모리에 올라가기 때문에
객체생성과 관련된 생성자로 초기화 할 수 없다.
static은 정적블록을 통하여 초기화 할수 있다.

package study_0418_01;

public class Static {

	String name;
	int count;
	
	public Static(String name, int count) {
		this.name=name;
		this.count=count;
	}
	
	static int num; //객체를 생성하기전에 먼저 메모리에 올라가므로 생성자를 사용하여 초기화 할수 없다.
	static { //static 변수를 초기화, 정적블록(인스턴스를 만들기전에 만들어짐)
		int su=0;
		for(int i=0;i<=10;i++) {
			su+=1;
			num=su;
		}
	}
	
}

5.클레스를 통한 배열 형성

package study_0418_01;

public class Student {
	//필드선언
	private String name;
	private String hakbun;
	
	//생성자 선언
	public Student() {}
	public Student(String name, String hakbun) {
		this.name=name;
		this.hakbun=hakbun;
	}
	
	//getter와 setter 선언하기
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getHakbun() {
		return hakbun;
	}
	public void setHakbun(String hakbun) {
		this.hakbun = hakbun;
	}
	
	//메서드 선언	
	public void studentInfo() {
		System.out.println(name+","+hakbun);
	}
}

6.enum은 열거형 타입인데, 숫자가 제한된다거나, 작업이 한정되어있는것에 대해 쓸수있다.
예)요일을 7개로 정해져 있어서 enum을 쓸수 있음,
불을켜다/끄다 와 같이 2가지 작업이 한정되어있을때 쓰임

좋은 웹페이지 즐겨찾기