My footsteps
기본형 매개변수, static과 인스턴스 매서드,생성자,상속 본문
- 기본형 매개변수 : 변수의 값을 읽기만 할수 있다 / 참조형 매개변수 : 변수의 값을 읽고 변경가능
- 참조형 매개변수를 사용하면 객체를 다룰수 있는 리모컨을 쥐어주는것과 똑같다. 매서드에게 참조형 매개변수를 통해
객체의 주소를 전달해주면 다른 매서드에서 객체를 읽을수도, 쓸수도 있다.
1. public static void main(String[] args)
2~3. Data2 d = new Data2();
4. d.x =10;
5~6. System.out.println("main() : x =" + d.x);
7. change(d);
8~9. static void change(Data2 d) { d.x = 1000;
10~12. Ststem.out.println("change() : x =" + d.x);
13~14. System.out.println("After change(d)");
15. System.out.println("main() : x =" +d.x);
- statice 매서드 == 클래스 매서드 (객체생성 안함)
class MyMath2 { // MyMath 클래스 생성
long a,b ; // iv(=객체 a,b)
long add ()
return a + b; // iv
}
// 인스턴스매서드 범위
static long add (long a, long b) { // lv(=a,b 지역변수,매개변수)
return a+b; // lv
}
}
// 클래스(static)매서드 범위
* 지역,참조 나누는건 범위에서 더 가까운쪽으로 따진다
* iv(=객체)는 매개변수(=입력값)이 없다,그 말은 즉 lv는 iv(=객체)가 필요없음. 그래서 클래스 자체를 바로 호출함
* 객체는 변수묶음이고, iv는 객체묶음
* ( ) 이 괄호에 매개변수(=입력값)이 있으면 지역변수(=lv),없으면 인스턴스 변수(=iv)
- 오버로딩 : 한 클래스 안에 같은 이름의 매서드 여러개 만드는것 ex)println( ) 하고 뒤 괄호에 다양한 매서드 넣는것
- 오버로딩 성립 조건
1. 매서드 이름이 같아야 한다.
2. 매개변수의 개수 또는 타입이 달라야 함
3. 반환 타입은 노상관
오버로딩 성립한 ex)
long add(int a, long b) { return a+b;}
long add(long a, lint b) { return a+b;}
// 맨앞 반환타입 long 같은거 노상관 > 3번 성립
그 뒤에 add 매서드 이름 같음 > 1번 성립
매개변수의 갯수는 같지만 long,int 서로 다름 > 2번 성립
- 초기화: 내가 원하는 값을 넣어주는것
- 기본생성자는 생성자가 하나도 없을때만 컴파일러가 자동으로 기본생성자를 추가해준다.
만약 생성자가 있는데도 기본생성자를 안만들어주면 에러가남
ex) Data() { } 이런식으로 공백괄호들이 기본 생성자
- 생성자 this() : 생성자에서 다른 생성자 호출할때 사용 가능, 다른 생성자 호출시 첫줄에서만 사용가능
- 참조변수 this (생성자 this랑 완전 다른거임!!)
1. 인스턴스(=객체) 자신을 가리키는 참조변수
2. 인스턴스 매서드(생성자 포함)에서 사용가능
3. 지역변수(lv)와 인스턴스변수(iv)를 구별할때 사용 (iv앞에 this 붙여서 구분)
4. 생략가능
5. 클래스매서드(=static 매서드) 에서 참조변수 this 사용 불가 / 생성자(lv와 iv구분할려고) 와 인스턴스 매서드(객체. 자기 홈그라운드)에서만 사용가능
- 지역변수(Iv)는 수동초기화를 사용전에 꼭 해야한다 , 반대로 멤버변수(iv, cv)는 자동초기화 됨
*초기화 종류*
1. 명시적 초기화 (대입연산자 =)
class Car {
int door =4; // 기본형변수의 초기화
Engine e = new Engine(); } // 참조형변수의 초기화,null인 e에다가 뭘 넣어줘야 초기화가 된다.
2. 초기화 블럭(복잡한 초기화때 사용)
인스턴스(iv) 초기화 블럭 { }
클래스(cv) 초기화 블럭 static { }
// 근데 이거 거의 안씀
3. 생성자(복잡한 초기화, iv 초기화)
- 클래스 변수 초기화 시점 : 클래스가 처음 로딩될때 단 한번
- 인스턴스 변수 초기화 시점 : 인스턴스가 생성될때마다
- 초기화 순서는 cv(클래스) → iv(인스턴스)
- 자동 → 간단 → 복잡
- 상속 : 기존의 클래스를 새로운 클래스로 작성하는것. 코드의 재사용, 두 클래스를 부모와 자식관계로 맺어줌
(잘 안씀. 거의 포함으로씀)
- 자손은 조상의 모든 것을 상속받는다 (단, 생성자와 초기화블럭은 제외) , 자손은 부모보다 적을수 없다. 같거나 많음,
자손의 변경은 조상에 아무 영향을 미치지 않음
ex)
class point { int x; int y; }
▶ class point3D extends point { int z; } // point클래스를 부모로 둬서 그 값들 모조리 다 상속받아 point3D는
int x,y,z 멤버3개를 갖게 됨
- 상속 : A는 B이다 / 포함 ; A는 B를 갖고있다
'예습 > 이론' 카테고리의 다른 글
참조변수의 형변환,instanceof,추상클래스 (0) | 2023.01.06 |
---|---|
단일 상속,오버라이딩,패키지,import문,제어자,final,접근제어자,다형성 (0) | 2023.01.05 |
객체 (0) | 2023.01.03 |
Srting배열,커맨드 라인,2차원 배열,객체 (0) | 2023.01.02 |
for문,while문,break문,배열 (0) | 2023.01.01 |