--------------------------this 보완
-- 내 코드
------ this에 대한 실습코드
public class ThisCall {
//field
private int i,j;
//constructor
//오버로딩
public ThisCall() {
}
public ThisCall(int i) {
this.i = i;
}
public ThisCall(int i, int j) {
this.i = i;
this.j = j;
}
//method
public int getA()
{
return i;
}
public int getB()
{
return j;
}
public static void main(String[] args) {
ThisCall tc1 = new ThisCall();
ThisCall tc2 = new ThisCall(1);
ThisCall tc3 = new ThisCall(2, 5);
System.out.println(tc1.getA() + "\t" + tc1.getB());// 0,0
System.out.println(tc2.getA() + "\t" + tc2.getB());// 1,0
System.out.println(tc3.getA() + "\t" + tc3.getB());// 2,5
}
}
-- 강사님 코드
public class ThisCall {
private int a;
private int b;
// ab를 초기화하는게 공통
public ThisCall() {
// a=b=0;
this(0,0); // 생성자에서 생성자 호출
}
public ThisCall(int a) {
// this.a = a;
// b=0;
this(a,0); // 관리가 쉬워짐, 유지보수
}
public ThisCall(int a, int b) {
this.a = a;
this.b = b;
}
public int getA() {
return a;
}
public int getB() {
return b;
}
public void setA(int a) {
this.a = a;
}
public void setB(int b) {
this.b = b;
}
public static void main(String[] args) {
ThisCall tc1 = new ThisCall();
ThisCall tc2 = new ThisCall(1);
ThisCall tc3 = new ThisCall(2, 5);
System.out.println(tc1.getA() + "\t" + tc1.getB());// 0,0
System.out.println(tc2.getA() + "\t" + tc2.getB());// 1,0
System.out.println(tc3.getA() + "\t" + tc3.getB());// 2,5
}
}
--- 정리
public class ThisExam01 {
private int a;
// setter
public void setA(int a) { // (ThisExam this, int aa)
this.a = a; // 필드 a인지 명확하게 구분지으려고 this를 썼음.
// this를 쓰지 않으면 우선순위가 매개변수임.
}
// getter
public int getA() { // getA(ThisExam this)
return this.a;
}
public ThisExam01 getObject() {
return this; // 자기자신의 객체를 리턴할때
}
public static void main(String[] args) {
ThisExam01 te = new ThisExam01(); // 생성자 호출
te.setA(10); // te.setA(te, 10)
System.out.println(te.getA());
}
}
/*
* this, this()
* - 인스턴스 메소드에 첫번째 매개변수
* - 자기 자신을 접근하는 레퍼런스
*
* this
* : instance method의 첫번째 매개변수로 항상 존재
* : 만들수는 없고 사용만 가능
*
* this
* 1. 매개변수 이름과 필드 이름이 같을 경우
* 2. 인스턴스 메소드에서 자기자신의 객체를 리턴할떄
*
* this() 자기 자신을 호출
* : 생성자 호출됨.
* : 생성자에서 또다른 생성자를 호출(내 자신의 생성자)
* : 이유 : 유지보수 관리가 쉬워짐
*/
-- 스태틱에서 인스턴스 강제접근
// 스태틱에서 인스턴스 변수에 접근하는 방법.
public class ThisExam02 {
private int a;
// 스태틱에서 굳이 인스턴스를 쓰고 싶으면 this 역할을 직접 구현해야함.
public static void disp(ThisExam02 te) {
System.out.println(te.a);
// 스태틱 필드에서 인스턴스 접근 불가
}
public static void main(String[] args) {
ThisExam02 te = new ThisExam02();//메모리를 만들었는데에도 못쓴다...왜? this로 객체를 구분해서 해야하는데 없기때문
te.disp(te);
//ThisExam02.disp();
}
}
-------------------------- 클래스 관계 (5일차 진도)
class A{ // data class
String n;
public String getN() {
return n;
}
public void setN(String n) {
this.n = n;
}
}
class B{ // data class
int n;
public int getN() {
return n;
}
public void setN(int n) {
this.n = n;
}
}
public class CallCon {
// has ~ A 관계
private A name; // A타입을 가져다 쓰면서 이름
private B age; // B타입을 가져다 쓰면서 나이
public CallCon() {
// 생성자에 객체를 생성과 동시에 필드의 클래스 변수를 초기화 해줘야함.
name = new A();
age = new B();
// 실제 객체를 누가 쓰느냐
}
public void setName(String n) {
this.name.setN(n);
}
public String getName() {
return this.name.getN();
}
public void setAge(int n) {
this.age.setN(n);
}
public int getAge() {
return this.age.getN();
}
public static void main(String[] args) {
// 사용자
CallCon cc = new CallCon();
cc.setName("super");
cc.setAge(1000);
System.out.println(cc.getName());
System.out.println(cc.getAge());
}
}
/* 5일차
*
* 클래스관계
* has ~ a ( ~가 ~를 가지고 있다.) // 리모콘
* : 객체가 필요에 의해서 객체를 가져다 쓰는 괸계
*
* 독립된 객체 : 데이터 클래스
* - 자기 자신만을 만듦 누군가 가쓴다면 쓸 수 있는 환경을 만들기 (main과 같음)
* 데이터클래스를 갖다 쓰는 클래스 : 데이터관리클래스
*
* is ~ a ( ~는 ~이다.)
*
*
*/
반응형
'자바과정 > Java' 카테고리의 다른 글
Java 실습(한사람 성적처리:과목수 입력) - 5일차 (0) | 2021.02.04 |
---|---|
Java 실습(성적처리프로그램:클래스) - 5일차 (0) | 2021.02.03 |
Java 실습(한사람 성적처리:메소드, 생성자) - 4일차 (0) | 2021.02.02 |
Java 실습(사칙연산계산기:메소드, 생성자) - 4일차 (0) | 2021.02.02 |
Java 기초 - 4일차 (0) | 2021.02.02 |
댓글