개발공부 2023 ~03~13

is-a,has-a(상속,포함관계) ,단일상속, super,super()

주우동 2023. 3. 27. 22:11

상속,포함관계

package javajungsuck;

public class C9포함 {

}
//상속관계 is a
//포함관계 has a
//어떨때 포함,상속을 구별해서 써야하나 ?
//문장을 만들어보면 좋다. 
//원은 점이다 (is a /상속) x 꼭필요한 경우에만 사용
//원은 점을 가지고 있다(has a /포함) o 대부분의 경우 사용

class Car {
	//포함관계 클래스를 참조변수로 갖는것
	//Car가 Door과 Circle을 포함하고 있다.
	Door door = new Door();
	Circle circle = new Circle();
}
class Door{
	int door = 4;
}
class Circle{
	int circle = 4;
}

단일상속

package javajungsuck;

public class C10단일상속 {
	
	public static void main(String[] args) {
		
	//object 클래스는 모든 객체의 조상 11개의 항목 상속받음 toString, hashcode ~~~~~
	//c10단일상속처럼 아무것도 상속받지 않는 클래스는 자동적으로 object클래스를 상속받게 된다.
	//to String(); 클래스의 이름과 주소값 나타내줌
	A a = new A();
	B b = new B();
	C c = new C();
	
	//a의 주소값 두문장이 같다는 걸 알고있어야한다.
	System.out.println(a.toString()); //javajungsuck.A@6f75e721
	//a의 주소값
	System.out.println(a); //javajungsuck.A@6f75e721
	}
}
	//자바는 단일상속만 허용한다. //c++은 다중상속허용
class A {//extends B,C{ //다중상속 오류가난다.
	int a;
}
class B{
	int b;
}
class C{
	int c;
}

super

package javajungsuck;

public class C12참조변수this {

	public static void main(String[] args) {
		Vod bo = new Vod();
		bo.seper();
	}
	//참조변수super
	//참조변수 super는 객체자신을 가리키는 참조변수 , 생성자 내에서만 존재
	//조상의 멤버를 자신의 멤버와 구별할 때 사용
	
}

class Vo {
	int x = 10 ;
}

class Vod extends Vo {
	//Vod를 상속받고 x가 겹친다. 
	int x = 20 ; //vod x를 없애면 x this.x super.x 모두 상속받은 vo의 x를 가르킨다.
	int y = 30;
	
	void seper() {
		
		System.out.println(x); //20
		System.out.println(this.x); //20
		System.out.println(super.x);//10
		
	}
}

 

super()

package javajungsuck;

public class C12this생성자 {

	public static void main(String[] args) {
		//super()
		//조상의 생성자를 호출할 때 사용
		//조상의 멤버는 조상의 생성자를 호출해서 초기화
		//super() 생성자 규칙
		//중요!!!!1.생성자의 첫줄에 반드시 생성자를 호출해야 한다. 그렇지 않으면 컴파일러가 생성자의 첫줄에 super를 삽입한다.
	}

}

class man {
	int x, y;
	
	man(int x, int y){
		super();//object 클래스의 생성자 호출
		this.x = x;
		this.y = y;
	}
	
}

class man1 extends man{
	int z;
	
	 man1(int x, int y, int z) {
		super(x,y); //super로 상위클래스항목 x,y초기화
		this.x = x;
		this.y = y;
		this.z = z;
	}
}