상속 Inheritance
•
중복되는 코드를 줄일 수 있다.
•
클래스의 필드와 메소드를 재사용할 수 있다.
상속과 생성자
예제
class TV {
private int size;
public TV(int size) {
this.size = size;
}
protected int getSize() {
return size;
}
}
class ColorTV extends TV {
private int color;
public ColorTV(int size, int color) {
super(size);
this.color = color;
}
public void printProperty() {
System.out.println(super.getSize() + "인치 " + color + "컬러");
}
}
class IPTV extends ColorTV{
private String address;
public IPTV(String address, int size, int color) {
super(size, color);
this.address = address;
}
public void printProperty() {
System.out.print("나의 IPTV는 "+address+" 주소의 ");
super.printProperty();
}
}
public class practice {
public static void main(String[] args) {
ColorTV myTV = new ColorTV(32, 1024);
myTV.printProperty();
IPTV iptv = new IPTV("192.1.1.2", 32, 2048);
iptv.printProperty();
}
}
Java
복사
메소드 오버라이딩 Method overriding
오버라이딩
•
함수 이름은 같지만 동작이 다르다 ( 똑같은 함수이름, 똑같은 인자 )
◦
반드시 상속관계에서 부모의 함수를 덮어쓰는 것
◦
함수 안의 바디만 다르게 하여야함
◦
@Override 어노테이션 이용
예제
class Shape{
public void draw() {
System.out.println("도형을 그립니다.");
}
}
class Rectangle extends Shape{
@Override //오버라이드: 함수 안의 바디만 다르게
public void draw() {
System.out.println("사각형을 그립니다.");
}
}
public class ShapeTest {
public static void main(String[] args) {
//1번
Shape shape = new Shape();
shape.draw();
Rectangle rectangle = new Rectangle();
rectangle.draw(); //자기 자신이 호출됨. "사각형을 그립니다."
}
}
Java
복사
미니 프로젝트 (월급 예제)
오버로딩
•
같은 함수 이름으로 파라미터의 데이터타입 또는 갯수를 달리할 수 있다.( 파라미터 다름 )
예제
class Circle{
private double r;
public double getArea() {
return Math.PI * r * r;
}
public double getArea(double radius) {
return Math.PI * radius * radius;
}
public double getArea(int radius, int n) {
return Math.PI * radius * radius;
}
public double getArea(Circle c) {
return Math.PI;
}
public double getArea(Circle[] c){
return Math.PI;
}
Java
복사
다형성 polymorphism
객체지향언어에서 중요
객체의 타입이 다르면 같은 메시지가 전달되어도 다른 동작
1.
부모 = 지식
2.
오버라이딩은 자식의 것( 기본적으로 )
class Shape{
public Shape() {
System.out.println("도형입니다.");
}
public void draw() {
System.out.println("도형을 그립니다.");
}
}
class Rectangle extends Shape{
public Rectangle() {
System.out.println("사각형 생성자");
}
@Override //오버라이드: 함수 안의 바디만 다르게
public void draw() {
System.out.println("사각형 도형을 그립니다.");
}
}
class Triangle extends Shape{
public Triangle() {
System.out.println("삼각형 생성자");
}
@Override
public void draw() {
System.out.println("삼각형 도형을 그립니다.");
}
}
public class ShapeTest {
public static void main(String[] args) {
// 부모 = 자식
Shape shape2 = new Rectangle();
shape2.draw();
shape2 = new Triangle();
shape2.draw();
}
}
Java
복사
//자식 = 부모 는 불가능
Rectangle rect = new Shape(); //에러:
Java
복사