본문 바로가기

Java

0427 접근제한자

 

package static_test;

 

class Student{

 

//정적멤버는 이탤릭체로 표현됨,

//static : 고정된 위치에 저장된 공유자원이라고도 함. 필드랑 메서드만 사용 가능

//한군데서 변경하면 모든클래스에서 정보가 변경됨.변경된 정보가 공유된다.

static String school;

 

String name;

int age;

String grade;

 

 

/* static메소드에서는 인스턴스멤버는 사용할 수 없다. 매개변수로 넘겨받은 값으로만 사용.

* -> 인스턴스 멤버 필요 없을때는 static메소드 만들어서 사용하는게 좋다.

//인스턴스 멤버 필요할때는 인스턴스 메서드 호출하기.

static void sendAge() {

System.out.println(this.name+"학생은 "+this.age+"나이입니다.");

}

*/

}

 

public class StaticTest {

 

public static void main(String[] args) {

Student stu1 = new Student();

stu1.age = 30;

stu1.grade = "A";

stu1.name = "최기근";

 

//static 사용시 (정적멤버 사용시) : 클래스이름.멤버이름

Student.school = "부산IT아카데미";

System.out.println(stu1.name);

System.out.println(stu1.school);

 

stu1.school = "부산직업전문학교";

 

Student stu2 = new Student();

stu2.name = "홍길동";

System.out.println(stu2.name);

System.out.println(stu2.school);

 

Student stu3 = new Student();

stu3.name = "김판길";

 

stu1.school = "부산사상교도소";

 

System.out.println(stu1.school);

System.out.println(stu2.school);

System.out.println(stu3.school);

System.out.println(stu2.school==stu1.school);

}

 

}

 


package final_test;

 

public class Car {

 

 

final : read only, 한 번 값이 부여되면 수정이 안됨.

static String company;

// KIA 가 KIN로 바껴도 회사는 같다.

final String model; // 차량의 모델 //final은 값 수정불가, 필드선언시 초기화 또는 생성자에서 초기화시켜주면 됨

final int maxSpeed; //최대 속도

int speed;

 

 

상수(값을 변경할 수 없고 어디서든 동일한 값을 쓸 수 있다)

상수는 대문자로 스네이크표기법 사용.(빅스네이크표기법) : 클래스이름으로 접근이 가능하고 값을 변경할 수 없는 상수구나~ 라고 알 수 있다.(클래스.빅스네이크표기법)으로 사용한다.

static final int MIN_SPEED = 0;

 

 

Car(){

this.model = "K3";

this.maxSpeed = 300;

}

//객체생성시 final객체 값 받아서 초기화 하는 방법도 있다.

Car(String model,int maxSpeed){

this.model = model;

this.maxSpeed = maxSpeed;

}

 

//정적멤버 안에서는 정적멤버를 쓸 수 있다. 인스턴스멤버는 바로 사용할 수 없다.

public static void main(String[] args) {

// speed = 10; 오류

System.out.println(MIN_SPEED );

System.out.println(Car.MIN_SPEED);

System.out.println(Math.PI);

System.out.println(Integer.MAX_VALUE);

System.out.println(Integer.MIN_VALUE);

System.out.println(Long.MAX_VALUE);

System.out.println(Long.MIN_VALUE);

}

}



package a1;

 

public class A {

B b = new B();

}


 

package a1;

//default 접근 제한자

//같은 패키지 내부에서 접근 가능

class B {

A a = new A();

}


package a2;

 

public class C {

a1.A a = new a1.A();

// a1.B b = new a1.B(); -> 접근 제한자가 dafault이기때문에 pkg벗어나면 안보임

}


 

package a3;

 

public class A {

//클래스 내부에서는 생성자 모두 사용 가능

A a = new A(); //public

A a1 = new A(10); //default

A a2 = new A("이기적인 놈"); //private

 

public A() {

System.out.println("public 생성자");

}

A(int a){

System.out.println("default "+a);

}

private A(String s) {

System.out.println("private"+s);

}

}


 

package a3;

 

public class B {

A a = new A(); //public

A a1 = new A(10); //default

// A a2 = new A("안된다"); //private 안됨

}


 

package a4;

 

import a3.A;

 

public class B {

A a = new A(); //public

// A a1 = new A(10); //default 안됨

// A a2 = new A("안된다"); //private 안됨

}


 

package a5;

 

public class A {

public int field1;

int field2;

private int field3;

 

//클래스 내부에서는 모든 접근제한자 사용가능

public A(){

field1 = 100;

field2 = 200;

field3 = 300;

methodA();

methodB();

methodC();

}

 

public int methodA() {

return field3;

}

 

int methodB() {

return field2;

}

 

private int methodC() {

return field1;

}

}


 

package a5;

 

public class B {

public B() {

A a = new A();

a.field1 = 100; //public

a.field2 = 2000; //default

// a.field3 = 300; // private

 

a.methodA(); //public

a.methodB(); //default

// a.methodC(); // private

}

}


 

package a6;

 

import a5.A;

 

public class C {

public C() {

A a = new A();

a.field1 = 100; //public

// a.field2 = 2000; //default

// a.field3 = 300; // private

 

a.methodA(); //public

// a.methodB(); //default

// a.methodC(); // private

}

}

 

클래스의 접근제한자는 public , default 가능

생성자,필드,메소드는 public,protected,default,private 다 가능

'Java' 카테고리의 다른 글

캡슐화 숙제  (0) 2023.04.28
04.28 캡슐화 , 싱글톤, 상속 , 오버라이드 , 다형성  (0) 2023.04.28
0427 실습 해설  (0) 2023.04.27
04.26 평가 틀린거  (0) 2023.04.27
04.25 클래스, 객체배열  (0) 2023.04.25