[Java] 상속,추상

주현·2024년 6월 16일

JAVA

목록 보기
6/12

📌 상속

  • 상속을 사용하는 이유
  • 유지보수성과 재사용성을 위해서
	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(정적)

  • 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가 초기화됨.
  1. count.si - static
  2. count.getsi - static
  3. 다음 static 블럭을 불러옴. 위에서부터 한번씩
  4. 그렇게 해서 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은 하나씩 만들어지고(메소드 영역에), 밑에 두개는 객체가 만들어질때 하나씩 만들어짐.

📌 abstract(추상)

  • 추상클래스는 new를 사용하여, 객체를 직접 생성할 수 없다. 즉, 새로운 실체클래스를 만들기 위한 부모 클래스로만 사용한다.
  • 또한, 자식 객체가 생성될 때, super()로 추상클래스의 생성자가 호출되기 때문에, 생성자 또한 반드시 있어야한다.
  • abstract 메소드는 자식 클래스의 공통 메소드라는 것만 정의할 뿐, 실행 내용은 가지지 않는다 그렇기에, {}를 붙이지 않음.

📌 interface

  • interface는 interface 상속시 extends, 클래스가 interface 상속시 implements씀
  • 필드를 선언하면 public static final
  • 메소드를 선언하면 public abstract 붙임.
  • abstract이 있으니 객체를 생성할 수가 없음.
  • 사용하는 이유는 다중상속을 위해서,

0개의 댓글