June is Combung
객체지향 이론 본문
package week5;
//전역변수 : 멤버 변수
//1. 인스턴스 변수 = non -static 변수 : 객체를 생성할때 (new..) heap
//생성되는 변수이다 . 각각의 객체마다 독단적으로 존재
//인스턴스객체 변수가 생성되기 전에는 사용이 불가능하다
//인스턴스 객체를 먼저 만든 후에 인스턴스객체변수이름.변수이름 접근 가능
//2. 클래스 변수 - static 변수 : 프로그램 시작될때 static 메모리방에서 생성
//클래스변수는 사용법이 2가지
// 클래스이름.클래스변수
// 인스턴스객체변수이름. 클래스변수
//같은 클래스로 만들어진 인스턴스 객체들과 값을 공유한다
//서로 다른 객체에서 접근을 해도 같이 값이 바뀐다
class Ex07 {
int num1;
static int num2 = 100; // 스테틱 변수는 파란색 이탈릭체 : 기울러진 파란색
int add(int x, int y) {
num1 = x;
num2 = y;
return x + y;
}
void printall() {
System.out.println("num1 = " + num1 + " num2 = " + num2);
}
}
//f11 누르면 먼저 메인이 호출된다
//메서드를 호출 한다 --> 클래스의 객체가 있어서
//객체를 만든다음에 메서드를 호출할 수 가 있다
//static 메서드는 우리가 클래스를 인스턴스화 (=new 클래스 이름())
//를 하지 않고도 클래스 변수에 접근이 가능하다 --> 무조건 프로그램이 시작하면 메모리 방을 만든다
public class Day17_1 {
// main(null);
public static void main(String[] args) {
// stack / heap / static
Ex07.num2 = 600;
// Ex07.num1
Ex07 e1 = new Ex07();
int res = e1.add(10, 20);
e1.num1 = 100;
e1.num2 = 500;
e1.printall();
Ex07 e2 = new Ex07();
e2.num1 = 700;
e2.num2 = 1000;
e2.printall();
e1.printall();
System.out.println("num2 = " + Ex07.num2);
// 상속 , 다형성 , 은닉성
/*
* // 접근제어자 --> 접근을 컨트롤 하는 키워드 /default //클래스 앞에 아무것도 안적었을때 자동으로 입력되는 거다 // 같은
* 패키지 내에서 접근 가능하다 // 접근제어자 -> 클래스 앞에 , 메서드 앞에 , 변수 앞에 : 사용해서 접근을 조절할 수 있다
* public // 같은 프로젝트 내에서 접근이 가능하다 --> 웹 프로젝트할때 private // 같은 클래스 에서만 접근이 가능하다 -
* > 보안 우수 : 은닉성 protected // 부모와 자식까지만 접근이 가능하다 // 상속 // 스테틱 : 스테틱 메모리에 생성되는 애들
* 앞에 붙는다
*/
}
}
package week5;
//자식은 여러명일 수 있다 , 부모는 단 한명
//extends 부모 클래스를 지정하는데
//extends 는 단 한개의 부모클래스만 들수 있다
//자바안에 모든 것들의 조상은 object
//b의 부모클래스 , 상위클래스
class A {
int a = 100;
int b = 200;
int c = 300;
A() {
}
public A(int a, int b, int c) {
super(); // 부모의 생성자 object :
this.a = a; // 인스턴스 객체의 주소값이 this
this.b = b;
this.c = c;
}
void print() {
System.out.println("A클래스야 ");
System.out.printf("a=%d b=%d c=%d \n", a, b, c);
}
}
//a 를 확장한 클래스 b
//b는 a의 자식 클래스 , 하위클래스
class B extends A {
// 자식은 간단하게 객체가 두개만들어 진다
// 본인 객체 주소--> this
// 부모객체 주소--> super
int a = 400;
int b = 500;
int c = 600;
void printA() {
// super 부모타입의 객체 주소가 들어있다
System.out.println(super.a);
}
}
class C extends A {
int aaa = super.a;
int bbb = super.b;
int ccc = super.c;
}
public class Test_extends {
public static void main(String[] args) {
A parent = new A();
parent.a = 10;
B child = new B();
System.out.println(child.a);
// 자식은 부모 모든것에 접근이 가능하다
// 메서드든 멤버 변수든
// 부모는 자식클래스에 있는 것 접근 불가능하다
// 그래서 자식이 부모보다 더 큰 범위의 값을 가지고 있다
child.printA();
child.print();
C child2 = new C();
child2.print();
}
}
Comments