- 유지보수성과 재사용성을 위해서
public Student(String name, int age, int stuid) {
super.setName(name); //super를 쓰는데, 안써도 됨 어차피 상속이라
this.setAge(age); //this를 쓰는데, 안써도 됨 어차피 상속이라.
setStuid(stuid);
}
public String toString() {
return super.toString() //에 super를 써야하는이유는 안쓰면 this.이기때문에 자기 자신을 호출하게됨.
}
- 객체 생성시 다양한 방법으로 초기화를 수행할 . 수있도록 하기 위함입니다.
- 코드의 유연성을 높임
- 객체를 생성하는 방법을 다각화하여 더 직관적이고 편리하게 만드는데 도움이 됩니다.
- 다양한 매개 값을 처리하기 위해 사용함.
- 접근 지정자는 상관x, 매개변수 타입 개수 순서로 다른 메소드로 구분됨.
- 또한 매개변수가 (int,int)가 있고, (long,long)이 있는데, add(long,long)으로 하면 가장 비슷한 (long,int)가 호출이 됩니다.
public class OverloadTest {
public static int add(int x,int y) {
System.out.println("public_int_add(int "+x+",int "+ y+")");
return x+y;
}
protected static long add(long x,long y) {
System.out.println("public_long_add(long "+x+",long "+ y+")");
return x+y;
}
static float add(float x,float y) {
System.out.println("public_float_add(float "+x+",float "+ y+")");
return x+y;
}
private static double add(double x,double y) {
System.out.println("public_double_add(double "+x+",double "+ y+")");
return x+y;
}
public static void main(String[] args) {
System.out.println(add(11,22));
System.out.println(add(11L,22L));
System.out.println(add(11F,22F));
System.out.println(add(1.1,2.2));
}
}
- static이 붙은 클래스에서는 객체를 생성해야함.
- 안하려면 불려오려는 class도 static이여야 함.
- static필드는 해당 필드가 공유되고 싶을 때 사용함.
class Count{
public static int si;
public int ii;
static {
si = 1;
System.out.println("static{1)"+si);
}
public static int getSi() {
return si;
}
static {
si = 2;
System.out.println("static{2)"+si);
}
}
public class staticCount {
public static void main(String[] args) {
System.out.println(Count.si);
}
}
- 데이터 로더는 스태틱 변수,스태틱 메소드를 찾음.
- 스택틱 블록을 찾음. 그 후 아까 찾은 스태틱 메소드 메인을 실행함. 그리고 메모리에 count class가 초기화됨.
- count.si - static
- count.getsi - static
- 다음 static 블럭을 불러옴. 위에서부터 한번씩
- 그렇게 해서 2가 찍힘.
<heap,stack>
public class FinalTest {
public static final int i = 11; //클래스 영역에, 상수
public static int j = 12; //클래스 영역에, 변수
public final int k = 13; //힙 영역에, 상수 heap- 생성자에서 딱 한번 수정이 가능함.
public int l = 14; //변수 인스턴스
//static은 하나씩 만들어지고(메소드 영역에), 밑에 두개는 객체가 만들어질때 하나씩 만들어짐.
- 추상클래스는 new를 사용하여, 객체를 직접 생성할 수 없다. 즉, 새로운 실체클래스를 만들기 위한 부모 클래스로만 사용한다.
- 또한, 자식 객체가 생성될 때, super()로 추상클래스의 생성자가 호출되기 때문에, 생성자 또한 반드시 있어야한다.
- abstract 메소드는 자식 클래스의 공통 메소드라는 것만 정의할 뿐, 실행 내용은 가지지 않는다 그렇기에, {}를 붙이지 않음.
- interface는 interface 상속시 extends, 클래스가 interface 상속시 implements씀
- 필드를 선언하면 public static final
- 메소드를 선언하면 public abstract 붙임.
- abstract이 있으니 객체를 생성할 수가 없음.
- 사용하는 이유는 다중상속을 위해서,