쌍용교육(JAVA)/JAVA

쌍용교육 -JAVA 수업 11일차 Abstract추상클래스

구 승 2024. 4. 11. 17:31
package kr.s22.object.abs;

//추상 클래스
//미완성된 개념으로 단독으로 객체 생성이 불가능하고 일반적으로 자식 클래스에 
//상속 되어져서 사용함.

//추상 클래스는 일반적으로 공통된 동작을 가지는 객체들을 그룹화하는 데 사용됨. 즉, 추상 클래스는 구체적인 객체의 공통된 특징을 추상화함.
//추상 클래스는 추상 메서드를 가질 수 있습니다. 추상 메서드는 선언만 되어 있고, 실제 구현은 하위 클래스에서 이루어져야 합니다.
//일반 메서드를 가질 수 있으며, 이는 하위 클래스에서 오버라이딩할 필요가 없습니다.

abstract class A{
	private int x;
	public void setX(int x) {
		this.x = x;
	}
	public int getX() {
		return x;
	}
}
//자식 클래스
class B extends A {
	int b = 200;
}
public class AbstractMain01 {
	public static void main(String[] args) {
		
		//A ap = new A(); //추상클래스는 부모클래스의 역할은 수행 가능하지만 직접 객체 생성은 불가능하다. 
							//<7번 라인의 abstract을 사용함으로써 안됨.>
		
		B bp = new B();
		bp.setX(100);
		System.out.println(bp.getX());
		System.out.println(bp.b);
	}
}
100
200

package kr.s22.object.abs;

//추상 클래스 -> 사용하는 이유: 강요하기 위해서 일반 메서드는 강요하는 것이 없다. 자식 메서드마다 구현할 것들이 다 다르기 때문에 꼭 해야될 것들만 추상 메서드 상태로 두는것
abstract class A2{
	private int x;
	public void sexX(int x) {
		this.x = x;
	}
	public int gexX() {
		return x;
	}
	//추상 메서드 -> 구현이 없는 메서드 {중괄호가 없음.}
	public abstract void make();
	
}
//자식 클래스
class B2 extends A2 { //B2에 빨간밑줄이 있다면 추상 메서드가 완벽히 구현이 되지않았다는 뜻. 추상메서드는 완벽히 구현되지 않으면 메모리에 올라가지 않기 때문이다.
	//부모 클래스의 추상 메서드를 구현 ->을 하면 B2의 빨간밑줄이 없어진다.
	@Override //재정의 한 것은 아니지만 재정의 방법을 사용한다.
	public void make() { //abstract빼고 그대로 쓰면됨.
		System.out.println("make");
	}
}
public class AbstractMain02 {
	public static void main(String[] args) {
		B2 bp =new B2();
		bp.make();
	}
}
make

package kr.s22.object.abs;

abstract class Animal {
	public void breathe() {
		System.out.println("숨을 쉬다");
	}
	//추상메서드
	public abstract void sound();
}
//자식클래스
class Dog extends Animal {
	//Animal의 추상메서드 sound 구현
	@Override
	public void sound() {
		System.out.println("개는 멍멍멍~~");
	}
	
		
}
class Cat extends Animal {
	//Animal의 추상 메서드 sound 구현
	@Override
	public void sound() {
		System.out.println("고양이는 야옹야옹~~");
		
	}
}
public class AbstractMain03 {
	public static void main(String[] args) {
		Dog d = new Dog();
		d.breathe();
		d.sound();
		System.out.println("-----------");
		Cat c = new Cat();
		c.breathe();
		c.sound();
	}
}
숨을 쉬다
개는 멍멍멍~~
-----------
숨을 쉬다
고양이는 야옹야옹~~

package kr.s22.object.abs;
//추상 클래스
abstract class AbsEx{
	int a = 100; //변수
	public int getA() {//일반 메서드
		return a;
	}
	//추상 메서드
	abstract public int getB();
	public abstract int getC();
}
//추상 클래스
abstract class AbsEx2 extends AbsEx{//AbsEx가 빨간 밑줄이 생긴다.
	//추상클래스를 추상클래스에 상속하면 추상메서드 구현의 의무가 없음
	String msg = "신세계";
	//추상 메서드
	public abstract String getMsg();
	//부코를래스의 추상메서드 구현
	@Override
	public int getB() {
		return 200;
	}
}
public class AbstractMain04 extends AbsEx2{
	//부모클래스의 추상메서드를 구현
	@Override
	public int getC() {
		return 300;
	}
	@Override
	public String getMsg() {
		return msg;
	}
	public static void main(String[] args) {
		AbstractMain04 am = new AbstractMain04();
		System.out.println(am.getA());
		System.out.println(am.getB());
		System.out.println(am.getC());
		System.out.println(am.getMsg());
		
	}
}
100
200
300
신세계