2일차
2019. 8. 13. 10:31ㆍ프로그래밍/Java
오버 로딩: 동일한 함수를 여러 개 만드는 거
오버 라이딩: 부모 값을 바꾸거나, 재정의 하기 위해
생성자를 쓰는 목적: 다양하게 오버 로딩 위해
instant 메쏘드
static 메쏘드
오버로딩: 동일한 함수를 여러 개 만드는 거
오버 라이딩: 부모 값을 바꾸거나, 재정의 하기 위해
생성자를 쓰는 목적: 다양하게 오버 로딩 위해
instant method
static method
this 레퍼런스: : 자기자신을 접근하는 객체 레퍼런스 변수
this는 인스턴트 메쏘드 앞에 위치해야 함, static method에는 this가 없음
/*
* this, this()
* 1. this
* : 자기 자신을 접근하는 객체 레퍼런스변수
* : 항상 인스턴스메소드 첫번째 매개변수로 항상 존재하고 있다.
* : 선언할수없다. 사용만 가능
* : 객체를 구별하기 위해, 메모리 절약효과가 있음.
* : 매개변수 이름과 필드이름이 갗을경우 this로 구별
* : 인스턴스 메소드에서 자기자신(객체)를 리턴할 경우
*/
class A{
private int a;
public void setA(int a) { //setA(A this, int aa)
this.a=a; //지역변수와 필드를 구분하기 위해 this사용
//this.a=aa;
//a = aa; this를 빼도 상관없음
}
public int getA() { //getA(A this)
return a;
}
public A getObject() {
return this;
}
}
public class This {
public static void main(String[] args) {
// TODO Auto-generated method stub
A aa = new A();
aa.setA(100); //aa.setA(aa,100)
System.out.println(aa.getA()); // aa.getA(aa)
System.out.println(aa);
//System.out.println(aa.toString()); toString 생략
}
}
생성자 오버로딩
class A{
private int a;
private int b;
public A() {
}
public A(int a) {
this.a=a;
}
public A(int a, int b) {
this.a=a;
this.b=b;
}
public int getA() {
return a;
//return this.a;
}
public int getB() {
return b;
}
}
public class This {
public static void main(String[] args) {
A aa = new A(); //생성자 함수 호출
A bb = new A(10); // 10,0
A cc = new A(30,40); //30,40
System.out.println(aa.getA()+"\t"+aa.getB());
System.out.println(bb.getA()+"\t"+bb.getB());
System.out.println(cc.getA()+"\t"+cc.getB());
}
}
다른 예
/*
* this()
* : 생성자에서 또 다른 생성자 호출
*/
class A{
private int a;
private int b;
public A() {
//a=b=0;
this(0,0); //유지보수 쉬움
}
public A(int i) {
//a=i;
//b=0;
this(i,0);
}
public A(int i, int j) {
a=i;
b=j;
}
public int getA() {
return a;
}
public int getB() {
return b;
}
}
public class This {
public static void main(String[] args) {
A aa = new A(); //생성자 함수 호출
A bb = new A(10); // 10,0
A cc = new A(30,40); //30,40
System.out.println(aa.getA()+"\t"+aa.getB());
System.out.println(bb.getA()+"\t"+bb.getB());
System.out.println(cc.getA()+"\t"+cc.getB());
}
}
이름.나이,국,영,수,총,평
public class Info {
private String name;
private int age;
public Info() {
//name = null;
//age = 0;
this(null,0);
}
public Info(String name, int age) {
this.name = name;
this.age=age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
/*
* 이름, 국,영,수,총,평,나이
*
*/
public class StudentInfo {
private Info info; //이름, 나이
private int kor,eng,mat; //국,영,수
private int total; //총
private float avg; //평
public StudentInfo() {
info = new Info();
kor=eng=mat=total=0;
avg=0.f;
}
public void setName(String name) {
info.setName(name);
}
public String getName() {
return info.getName();
}
public void setAge(int age) {
info.setAge(age);
}
public int getAge() {
return info.getAge();
}
public int getKor() {return kor;}
public int getEng() {return eng;}
public int getMat() {return mat;}
public void setKor(int kor) {this.kor=kor;}
public void setEng(int eng) {this.eng=eng;}
public void setMat(int mat) {this.mat=mat;}
public int getTotal() {return total=kor+eng+mat; }
public float getAvg() {return avg=total/3.f;}
public static void main(String[] args) {
StudentInfo si=new StudentInfo();
si.setName("Supermam");
si.setAge(1000);
si.setKor(100);
si.setEng(70);
si.setMat(75);
System.out.println(si.getName());
System.out.println(si.getAge());
System.out.println(si.getKor());
System.out.println(si.getMat());
System.out.println(si.getEng());
System.out.println(si.getTotal());
System.out.println(si.getAvg());
}
}