자바 기초 클래스(상속)

웅평·2023년 12월 3일

상속

  • 상속은 하나의 부모클래스로 부터만 가능하다
  • 공통된 부분을 상속을 통해 중복 코드를 줄인다.

클래스 변수

  • 클래스의 맴버변수명 앞에 static키워드가 붙은 변수를 말하며 객체와 무관하게 사용할 수 있는 변수이며 모든 객체가 공동으로 사용할 수 있다.
  • 정적 변수
public class FamilyTest {
	public static void main(String[] args) {
		
		Family.addr = "서울시 마포구 서교동";
		//클래스 변수는 객체와 무관하게 사용할 수 있어요.
		
		System.out.println(Family.addr);
		
		Family.pro();
		//클래스 메소드는 객체와 무관하게 사용할 수 있어요.
		
		
		/*
		Family father = new Family();
		father.name = "김철수";
		father.age = 32;
		
		Family son = new Family();
		son.name = "김쌍용";
		son.age = 5;
		
		System.out.println(father.name);
		System.out.println(father.age);
		System.out.println(father.addr);
		System.out.println("----------------------");
		System.out.println(son.name);
		System.out.println(son.age);
		System.out.println(son.addr);
		
		father.addr = "제주시 서귀포시 애월읍";
		System.out.println("==========================");
		System.out.println(father.name);
		System.out.println(father.age);
		System.out.println(father.addr);
		System.out.println("----------------------");
		System.out.println(son.name);
		System.out.println(son.age);
		System.out.println(son.addr);
		*/
		
	}
}

public class Family {
	String name;
	int age;
	public static String addr;
	
	public void sayHello() {
		System.out.println("안녕,"+name);
		System.out.println("주소:"+addr);
	}
	
	public static void pro() {
	//	System.out.println("이름:"+name);
	//	System.out.println("나이:"+age);
    // static 메소드에서는 static맴버에만 접근할 수 있어요!
		
		System.out.println("주소:"+addr);
		System.out.println("Family 클래스의 pro입니다.");
	}
}
  • 클래스를 구성하고 있는 맴버변수에 접근하려면 반드시 객체를 생성하고 그 객체를 통해서 사용해야 하듯이 클래스를 구성하고 있는 맴버메소드에 접근하기 위해서 반드시 객체를 생성하고 그 객체를 통해서 사용해야 한다.

클래스 메소드는 객체와 무관하게 객체 없이도 동작하는 메소드 이기 때문에 객체를 생성해야만 확보된 메모리 영역인 일반 맴버변수에 접근할 수 없고 클래스 변수에만 접근할 수 있다

클래스 메소드

  • 클래스의 맴버메소드명 앞에 static키워드 붙은 메소드를 말하며 객체와 무관하게 사용할 수 있는 메소드이며 클래스이름으로 접근한다.
  • 클래스 메소드 안에서는 클래스맴버에만 접근해야 한다.
  • 정적 메소드

클래스의 상속

  • 이미 있는 클래스를 확장하여 새로운 클래스를 만들 수 있다
  • 상속을 해준 클래스를 부모클래스, 상속을 받은 클래스를 자식 클래스라고 한다
  • 자식 클래스는 부모의 모든 속성과 동작을 물려받는다
  • 자식 클래스에서 부모의 맴버에 접근 가능
  • 부모 private 영역에는 자식클래스가 직접 접근할 수 없다

외부의 다른 클래스로 부터는 접근을 못하도록하고 상속받은 자식 클래스에게는 접근을 허용

상속과 생성자

생성자는 객체생성시에 자동수행되며 사용자가 생성자를 한개도 만들지 않으면 매개변수를 갖지 않는 기본생성자가 제공된다. 그러나 생성자를 한개라도 만들게 되면 기본생성자는 제공되지 않는다.

상속관계에 있을때

  • 자식의 객체를 생성하게 되면 부모의 생성자가 먼저 동작하고 자식의 생성자가 동작한다.
  • 만약 자식 생성자에서 별다른 문장이 없으면 부모의 기본생성자를 요구한다.
  • 만약 부모의 매개변수를 갖는 생성자를 동작시키려면 super([값..])를 이용한다. 이때 super()는 반드시 생성자의 첫번째 문장에 와야 한다.

상속의 방법(선언) - extends

  • 자바에서는 자식 클래스가 여러 부모로부터 다중 상속을 받는 것은 불가능하다. 즉, 1개의 부모 클래스로부터의 단일 상속만 허용된다. 하지만 부모 클래스는 여러 개의 자식 클래스에게 상속이 가능하다.

상속의 사용

public class Person {
	String name;
	String addr;
	String phone;
}

public class Customer extends Person {
	String no;
	int mileage;	
	
}

public class CustomerTest {
	public static void main(String[] args) {
		Customer c = new Customer();
		c.name = "박세연";
		c.addr = "서울시 마포구 서교동";
		c.phone = "010-1234-5678";
		c.no = "A1234";
		c.mileage = 1000;
		
		System.out.println("고객명:"+c.name);
		System.out.println("주소:"+c.addr);
		System.out.println("전화:"+c.phone);
		System.out.println("고객번호:"+c.no);
		System.out.println("마일리지:"+c.mileage);
	}
}
  • Customer는 Person의 자식이다

국비학원에서 배운것과 따로 공부한 것을 정리한 것입니다

참고
나도코딩 유튜브

0개의 댓글