java 추상 메소드

2024. 5. 17. 12:31java



유사한 클래스들을 하나로 묶기 위해 사용

추상 클래스, 메소드

객체 생성이 불가능한 불완전한 클래스 abstract

abstract class Shape {
abstract public double getArea();
}

abstract 키워드 사용 

반환형, 이름, 인자 관련 선언만 존재한 것

세미콜론으로 끝남

추상 메소드를 가진 클래스는 추상 클래스라고 함

 

추상 클래스를 상속받은 자식 클래스에서 메소드 기능 구현

abstract class AA { abstract public int add(int a, int b); }
class C extends AA {
public int add(int x, int y) { return x+y; }
public void show() {
System.out.println("Java 추상클래스와 오버라이딩 ");
}  }

public class Ex1 {
public static void main(String[] args) {
C c=new C();
c.show();
System.out.println(c.add(5,10));
} }

AA클래스(추상클래스)를 상속받은 C클래스에서 add 메소드를 오버라이딩

C클래스는 객채생성이 가능함(일반 클래스)

 

 

 

 

 

 

인터페이스

추상클래스는 객체생성이 불가능한 클래스 일반 메소드는 정의가능

인터페이스는 추상메소드만 가능 

인터페이스 데이터필드는 항상 public static final 공유 상수임

 

interface Figure{ double getArea();}
class Triangle implements Figure{
    private double height,width;
public Triangle(double h,double w) {
height=h;
width=w;   }
public double getArea() { return height*width*0.5;  };
}

public class InterfaceMain01 {
public static void main(String[] args) {
Triangle t=new Triangle(3.0,4.0);
System.out.println(t.getArea());
}
}

인터페이스 클래스를 상속 받을 떄 implements 사용 

default 메소드 

인터페이스에 정의한 메소드

package sam2;

interface PhoneInterface {
	final int TIMEOUT = 10000;

	void sendCall();

	void receiveCall();

	default void printLogo() {
		System.out.println("phone");
	}
}

class CA1c {
	public int caculate(int x, int y) {
		return x + y;
	}

}

class SamsungPhone extends CA1c implements PhoneInterface {
	public void sendCall() {
		System.out.println("띠리리링");

	}

	public void receiveCall() {
		System.out.println("전화가 왔습니다.");
	}

	public void flash() {
		System.out.println("전화기에 불이 켜졌습니다.");
	}

}

public class InterfaceEx1 {

	public static void main(String[] args) {
		SamsungPhone p = new SamsungPhone();
		p.printLogo();
		p.sendCall();
		p.receiveCall();
		p.flash();
		System.out.println(p.caculate(3,3));

	}

}

 

위와같이 일반 클래스와 인터페이스 클래스 두개를 상속받을 수 있음

다중상속

 

 

 

 

과제

package sampletest;

import java.util.*;

abstract class Calculator {
	public abstract int add(int a, int b);

	public abstract int subtract(int a, int b);

	public abstract double average(int[] a);
}

class GoodCalc extends Calculator {
	public int add(int a, int b) {
		return a + b;
	}

	public int subtract(int a, int b) 
	{
		
		return a-b;
	}

	public double average(int[] a) 
	{
		int b = 0;
		for(int ele:a) 
		{
			b=b+ele;
		}
		return Math.round(b/a.length);
	}

}

public class Ex1 {

	public static void main(String[] args) 
	{
		GoodCalc a=new GoodCalc();
		int []arr= {1,2,3,4,5};
		System.out.println(a.add(3,10));
		System.out.println(a.subtract(4,3));
		System.out.println(a.average(arr));

	}

}

 

'java' 카테고리의 다른 글

java 오버라이딩, 업캐스팅, 다운캐스팅  (0) 2024.05.17