자바 기초(접근제어자)
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가지 작업이 한정되어있을때 쓰임
Author And Source
이 문제에 관하여(자바 기초(접근제어자)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cbn1218/자바-기초접근제어자저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)