자바기초(인터페이스)

bitna's study note·2022년 4월 22일
0

자바

목록 보기
53/119

4월 22일 내용정리

1.인터페이스는 틀만 주어진것으로 추상메서드로만 이뤄져 있다.
추상클래스와 다른건 추상클래스는 1~80%까지 일부분 구현해주고 나머지는 자식에게 상속하여 구현해주는데,인터페이스는 진짜 틀만주고 나머지는 자식클래스에서 모두 구현

2.인터페이스 와 추상클래스의 제일큰 차이점은 인스턴스(메서드,변수) 포함할수 있는가 없는가의 차이
인터페이스는 완성형 메서드포함안됨(디폴드 메서드와 정적메서드는 예외)

3.인터페이스 특징
(1)인스턴스변수를 포함 불가
(2)다중상속이가능
(3)디폴트 메서드 선언가능,
(4)생성자와 main선언 불가,
(5)상속받을때는 인터페이스로만 상속 받아야한다.
(6)접근범위는 public까지 쓸수 있다.

4.인터페이스에서는 public static final abstract 이 디폴트로 되어 있어서 쓰지않아도 설정

5.인터페이스에 쓸수 있는것
(1)상수!!!
(2)추상메서드!!!
(3)디폴트메서드(인스턴스메서드)
(4)정적메서드
(5)privite메서드를 쓸수 있게 해줌

6.클래스와 인터페이스 관계
자식class-> extends 상속 -> 부모class
자식interface-> extends 상속 -> 부모interface
자식interface-> implements 구현-> 부모class

7.클래스가 다중상속이 안되는 이유는 1번한테 상속받았는지 2번한테 상속받았는지 컴파일러가 모른다.
그런데 인터페이스는 내용이 없기 때문에 구현 할게 없으므로여러개를 상속 받을수 있다.

부모 인터페이스

package study_0422;

public interface interface0422 {
	//자식에서 한번에 모두 구현하기
	public static final double PI=3.14;
	
	public abstract int add(int x,int y);
	
	public abstract int substract(int x,int y);
	public abstract int multiplication(int x,int y);
	public abstract int divide (int x,int y);
	public abstract double dividedouble (int x,int y);	
}

모두 구현한 자식클래스

package study_0422;

public class Carculator implements interface0422 {
	// 인터페이스를 가져다 쓸때는 implements 를 쓴다.
	// 인터페이스는 상속이라는 말보다 구현한다라고 표현한다.
	// 상속은 확장한다. 라고도 표현한다.
	
	@Override
	public int add(int x, int y) {
		return x+y;
	}

	@Override
	public int substract(int x, int y) {
		return x-y;
	}

	@Override
	public int multiplication(int x, int y) {
		return x*y;
	}

	@Override
	public int divide(int x, int y) {
		int result =0;
		if(y != 0)
			result=x/y;
		else
			result=-9999999; //쓰레기값
		return result;
	}

	@Override
	public double dividedouble(int x, int y) {
		double result =0.0;
		if(y!=0.0)
			result =(double)x/(double)y;
		else
			result =-9999999;
		return result;
	}


}

실행 클래스

package study_0422;

public class CalcuExam {

	public static void main(String[] args) {
		
		Carculator cal= new Carculator();
		int x=7;
		int y=3;
		
		System.out.println(cal.add(x, y));
		System.out.println(cal.substract(x, y));
		System.out.println(cal.multiplication(x, y));
		System.out.println(cal.divide(x, y));
		System.out.println(cal.dividedouble(x, y));

		
	}
}

===============================================

부모 인터페이스(interface0422)
1차 구현한 자식추상클래스

package study_0422;

public abstract class CarParent implements interface0422  {

	
	int num1;
	int num2;
	
	//생성자
	public CarParent() {}
	public CarParent(int num1,int num2) {
		this.num1=num1;
		this.num2=num2;
	}
	
	//메서드
	@Override
	public int add(int x, int y) {
		return x+y;
	}

	@Override
	public int substract(int x, int y) {
		return x-y;
	}
	
	public void showinfo() { //자신 클래스안에서 값을 넣어서 처리
		System.out.println("덧셈결과:"+add(3,7));
	}

	public void showinfo01(int x,int y) { //외부로부터 값을 받아서 처리할때 쓰임
		System.out.println("덧셈결과:"+add(x,y));
	}
	
	public abstract int divide (int x,int y);
	
	public abstract double dividedouble (int x,int y);
	
}

2차 구현한 손자클래스

package study_0422;

public class CarChild extends CarParent {


	//생성자
	//부모는 추상클래스라서 생성자(인스턴스만들때 호출하는것)를 쓸수 없어서
	//자식 클래스가 생성자를 만들어 줘야한다.
	public CarChild() {
		super(); //부모의 생성자 호출하고 자식생성자에게 넘겨줌
	}
	public CarChild(int num1, int num2) {
		super(num1, num2);
		// TODO Auto-generated constructor stub
	}
	
	//메서드
	@Override
	public int multiplication(int x, int y) {
		return x*y;
	}

	@Override
	public int divide(int x, int y) {
		int result =0;
		if(y != 0)
			result=x/y;
		else
			result=-9999999; //쓰레기값
		return result;
	}

	@Override
	public double dividedouble(int x, int y) {
		double result =0.0;
		if(y!=0.0)
			result =(double)x/y;
		else
			result =-9999999;
		return result;
	}

	
}

실행 클래스

package study_0422;

public class CalExam01 {

	public static void main(String[] args) {
		
		//추상클래스는 객체를 생성할수 없기 때문에 부모를 객체생성할수 없고, 자식을 통해서 객체 생성
		CarChild child= new CarChild();
		child.showinfo();
		
	}

}
profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글

관련 채용 정보