본문 바로가기

Java

수직 상속, Abstract Class

● 수직 상속은 실무에서 많이 쓴다고한다. ex) 안드로이드 프레임워크

예시)

package model;

public class GrandParent {
	
	private String name;
	private int age;
	
	public GrandParent(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public GrandParent() {
		
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	public void print() {
		System.out.println(name);
		System.out.println(age);
	}

}

package model;

public class Parent extends GrandParent{
		private String job;

		public Parent(String name, int age, String job) {
			super(name, age);
			this.job = job;
		}

		public Parent() {
			
		}

		@Override
		public void print() {
			
			super.print();
			System.out.println(job);
		}

		public String getJob() {
			return job;
		}

		public void setJob(String job) {
			this.job = job;
		}
			
}

package model;

public class Child extends Parent{
	
	String hobby;

	public Child(String name, int age, String job, String hobby) {
		super(name, age, job);
		this.hobby = hobby;
	}

	public Child() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public void print() {
		// TODO Auto-generated method stub
		super.print();
		System.out.println(hobby);
	}

}

상속은 1개의 클래스만 받을 수 있다!!!


package main;

import model.Child;
import model.GrandParent;
import model.Parent;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		GrandParent gp1 = new GrandParent("홍길동", 80);
		GrandParent gp2 = new GrandParent();
		
		gp2.setName("김나나");
		gp2.setAge(77);
		
		gp1.print();
		gp2.print();
		
		Parent p1 = new Parent("홍철수", 55, "직장인");
		p1.print();
		
		Parent p2 = new Parent();
		p2.setName("김영희");
		p2.setAge(60);
		p2.setJob("주부");

		p2.print();
		
		Child c = new Child("김가을",23,"학생","게임");
		c.print();
	}

}

● abstract class(추상 클래스)란?

: 메소드의 이름만 있고, 내용은 아직 정하지 않은 메소드가 존재한다.

→신입이 만들일 없다 고참이 만들어놓는다.

package model;

public abstract class GrandParent {
	
	String name;
	int age;
	
	public abstract void print(); 

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
}

package model;

public class Parent extends GrandParent {

	String job;
	
	@Override
	public void print() {
		// TODO Auto-generated method stub
		System.out.println(name);
		System.out.println(age);
		System.out.println(job);
	}

	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}
	
	
}

package main;

import model.Parent;

public class Main {

	public static void main(String[] args) {

		Parent p = new Parent();
		p.setName("홍길동");
		p.setAge(55);
		p.setJob("백수");
		
		p.print();

	}

}

●  상속받아서, abstract를 쓴 함수 이름을 이용해서 오버라이딩 해라!

● 다른거 만들지말고 이 함수로 하라고 함수이름을 정해주는것이다! 

● abstract 한번이상 쓰면 클래스에 abstract 넣어준다.

'Java' 카테고리의 다른 글

ArrayList  (0) 2023.07.04
인터페이스(Interface)  (0) 2023.07.04
실습: 학사관리  (0) 2023.07.03
메소드 오버라이딩(Method Overriding)  (0) 2023.07.03
private와 상속  (0) 2023.07.03