JAVA 7강_4_추상 클래스(abstract)

열라뽕따히·2024년 2월 17일

JAVA

목록 보기
44/79

추상 클래스(abstract class)

추상 클래스에서 error 발생 처리 방법 - 2가지
1. 자식 클래스에서 추상 메서드를 재정의 ( O )
2. 자식 클래스에서 추상 메서드를 재정의 하지 않는 경우 : 자식 클래스 이름 앞에 abstract 키워드를 붙여야 함





<예시>


추상 클래스 Super 클래스 생성


=============================코드=============================

public abstract class Super {    // 추상 클래스
	
	int num1;           // 인스턴스 멤버변수
	
	int calc() {        // 인스턴스 멤버메서드
		return num1 + 100;
	}
	
	
	abstract void output();      // 추상 메서드

}

Super 추상 클래스를 상속 받을 Sub 클래스 생성


=============================코드=============================

public class Sub extends Super{  

	@Override
	void output() {
		
		System.out.println("추상 메서드 재정의 했어요!!");
		
	}

}



메인메서드로 출력할 Super_01 클래스 생성


=============================코드=============================

public static void main(String[] args) {
		
		// 추상 클래스는 객체 생성 불가능
		// Super super = new Super();
		
		Sub sub = new Sub();
		
		sub.num1 = 35;
		
		System.out.println("calc() 메서드 호출 >>> " + sub.calc());
		
		sub.output();  // 추상메서드 재정의 호출

	}





<예시>

추상클래스 Person을 생성하고 setter, getter를 이용해 사람의 정보를 출력하는 메서드를 만들어보자


=============================코드=============================

public abstract class Person {
	
	String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	// 사람의 정보를 출력하는 메서드
	abstract void getInfo();   // 추상 메서드

}



Person 추상 클래스를 상속 받을 Student 클래스 생성하고, Student 클래스에 멤버변수로 학번과 학과를 호출하자


=============================코드=============================

public class Student extends Person{
	
	String hakbun;
	String major;
	
	public Student() { }   // 기본 생성자
	
	public Student(String hakbun, String name, String major) {
		this.name = name;
		this.hakbun = hakbun;
		this.major = major;
		
	}   // 인자 생성자
	
	
    // 부모 클래스의 추상 메서드를 재정의한 메서드
	@Override
	void getInfo() {
		
		System.out.println("학생 학번 >>> " + hakbun);
		System.out.println("학생 이름 >>> " + name);
		System.out.println("학생 학과 >>> " + major);
		
	}  // getInfo() 메서드 end

}



마찬가지로 Person 추상 클래스를 상속 받을 Professor 클래스를 생성하고, 전공을 멤버변수로 호출하자


=============================코드=============================

public class Professor extends Person {
	
	String major;
	
	
	public Professor() { } // 기본 생성자
	
	public Professor(String name, String major) { 
		this.name = name;
		this.major = major;
		
	} // 인자 생성자
	
	
	// 부모 클래스의 추상 메서드를 재정의한 메서드
	@Override
	void getInfo() {
		
		System.out.println(name + " 교수입니다.");
		System.out.println(major + " 과목을 강의 중입니다.");
		
	} // getInfo() 메서드 end

}



메인메서드로 출력할 Person_02 클래스를 생성


=============================코드=============================

public static void main(String[] args) {
		
		Student student = new Student("2024_001", "홍길동", "컴퓨터공학과");
		Professor professor = new Professor("세종대왕", "국문학과");
		
		student.getInfo();
		
		System.out.println();
		
		professor.getInfo();
		
}

=============================실행=============================





<예시>

스마트폰의 공통적인 기능을 추상 클래스로 생성하고 각 스마트폰 제조사별의 특성(회사 이름, 기계 이름, 색상, 크기, 무게, 가격)을 멤버변수로, 위 멤버변수를 담을 추상 메서드를 호출해보자



추상클래스로 만들 SmartPhone 클래스 생성


=============================코드=============================

public abstract class SmartPhone {
	
	// 스마트폰의 공통적인 기능의 특성(속성)
	String call = "전화";
	String sns = "문자";
	String search = "검색";
	String game = "게임";
	
	// 각각의 기계(단말기)들의 특성
	String company, name, color, size, weight, price;
	
	void purpose() {
		System.out.println("사용목적 : " + call + " / " + sns + " / " + search + " / " + game);
	}
	
	// 각각의 단말기(기계)들의 spec
	abstract void spec();

}



SmartPhone 추상 클래스를 상속받을 Galaxy 클래스 생성


=============================코드=============================
public class Galaxy extends SmartPhone {

	@Override
	void spec() {
		
		company = "삼성"; name = "Galaxy s24";
		color = "화이트"; size = "22cm";
		weight = "350g"; price = "140만원";
		
		System.out.println("제조사 : " + company + " / 단말기명 : " + name + " / 색상 : " + color + 
							" / 규격 : " + size + " / 무게 : " + weight + " / 가격 : " + price);
		
	}

}



SmartPhone 추상 클래스를 상속받을 IPhone 클래스 생성


=============================코드=============================

public class IPhone extends SmartPhone {

	@Override
	void spec() {
		company = "애플"; name = "IPhone 14 pro";
		color = "화이트"; size = "15cm";
		weight = "200g"; price = "155만원";
		
		System.out.println("제조사 : " + company + " / 단말기명 : " + name + " / 색상 : " + color + 
							" / 규격 : " + size + " / 무게 : " + weight + " / 가격 : " + price);
		
	}

}



메인메서드로 출력할 SmartPhone_03 클래스를 생성


=============================코드=============================

public static void main(String[] args) {
		
		Galaxy galaxy = new Galaxy();
		IPhone iPhone = new IPhone();
		
		galaxy.purpose();
		galaxy.spec();    // 추상 메서드 재정의
		
		System.out.println();
		
		iPhone.purpose();
		iPhone.spec();    // 추상 메서드 재정의

	}

=============================실행=============================

0개의 댓글