June is Combung

객체지향 이론 본문

java/객체지향

객체지향 이론

june__Park 2021. 3. 25. 00:18
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();
	}
}

'java > 객체지향' 카테고리의 다른 글

병원 (완성)  (0) 2021.03.25
인터페이스 예제 (전투게임)  (0) 2021.03.25
날짜와 시간  (0) 2021.03.25
도서관리  (0) 2021.03.25
병원  (0) 2021.03.25
Comments