예제1)
public class Test7 {
public static void main(String[] args) {
System.out.println(Demo7.a); //10 => 인터페이스는 static이 들어가 있기때문에 바로 사용가능.
Ex7 ob=new Ex7();
ob.write(); // 테스트.........
ob.print(); // print.................
Demo7 oo=new Ex7(); // 업캐스팅 //Demo7아버지를 Ex7자식으로 업캐스팅함.
oo.write();
// oo.print(); //에러
((Ex7)oo).print(); // 다운 캐스팅, 업된것만 다운캐스팅 가능
}
}
/*
* 인터페이스 : 메소드가 선언만 있고 정의가 없다.
* 변수는 static final 만 가능 하며 붙이지 않아도 public static final 기능을 가짐.
* 메소드는 선언만 가능하고 자동으로 public abstract 자료형 메소드() 가 된다.
* 인터페이스를 구현한 클래스 중 추상클래스가 아닌 경우에는 인터페이스의 모든 메소드를 재정의 해야한다.
* 인터페이스는 다중 상속을 지원한다.
*/
interface Demo7{
public int a=10; // public 안붙여도 됨.
public void write(); // public 안붙여도 됨.
}
class Ex7 implements Demo7 {
@Override
public void write() {
System.out.println("테스트........."); //재정의를 한다.
}
public void print() {
System.out.println("print.................");
}
}
예제1 결과)
10
테스트.........
print.................
테스트.........
print.................
========================================================================================================================================
예제2)
public class Test8 {
public static void main(String[] args) {
Sam1 ob1=new Demo8(); //업캐스팅
Sam2 ob2=new Demo8(); //업캐스팅 //Sam1도 아버지 Sam2도 아버지가 된다.
Demo8 ob3=new Demo8();
ob1.write();
// ob1.print(); //컴파일오류(컴파일시 인지하지 못함)
((Demo8)ob1).print(); // 다운캐스팅
// ob2.write(); 에러.
ob2.print();
ob3.write();
ob3.print();
}
}
interface Sam1 {
public void write();
}
interface Sam2 {
public void print();
}
class Demo8 implements Sam1,Sam2 { // implements로 interface의 정의되지않은 메서드를 가져와서 재정의한다. 인터페이스 여러개를 가져와 다중상속받듯 사용가능하다
@Override
public void print() {
System.out.println("print.........");
}
@Override
public void write() {
System.out.println("write................");
}
}
예제2 결과)
10
테스트.........
print.................
테스트.........
print.................
=====================================================================================================================================
예제3)
package com.test0520;
public class Test9 {
public static void main(String[] args) {
Sam5 ob=new Demo9();
ob.print();
ob.write();
ob.test();
}
}
interface Sam3{
public void write();
}
interface Sam4{
public void print();
}
//인터페이스 상속,다중 상속지원
interface Sam5 extends Sam3,Sam4 { // 인터페이스로 인터페이스를 상속받을 때는 extends?
public void test();
}
//implements sam5인터페이스와 상속받은 인터페이스의 메서드 모두 불러옴
class Demo9 implements Sam5 {
@Override
public void write() {
System.out.println("wirte......");
}
@Override
public void print() {
System.out.println("print......");
}
@Override
public void test() {
System.out.println("test......");
}
}
예제3 결과)
print......
wirte......
test......