상속과 추상함수, 인터페이스의 활용
by 으렴1. 단순히 생성자를 만들고 함수를 만듦
class Apple{ int num; public Apple() {} public void func() { System.out.println("함수 call"); } }
2. 계층상속
class Fruit{ int num; public Apple() {} public void func1() { System.out.println("괴일"); } } class Banana extends Fruit{ int num2; public Banana() {} public void func2() { System.out.println("배내내"); } } class Orange extends Banana{ int num3; public Orange() {} public void func3() { System.out.println("과일의 자식인 바나나의 자식인 외랜지 함수3이 호출됨"); } }
3. 추상함수
abstract class Apple { int num; public Apple() { } public void func1() { System.out.println("fun1"); } public abstract void func2(); } class Banana extends Apple{ int num2; public Banana() {} @Override public void func2() { System.out.println("123123"); } }
4. 인터페이스
interface Apple { public void fun1(); public void fun2(); } class Fruit implements Apple { @Override public void fun1() { // TODO Auto-generated method stub System.out.println("인터페이스 1번"); } @Override public void fun2() { // TODO Auto-generated method stub System.out.println("인터페이스 2번"); } }
인터페이스에도 abstract를 쓸 수 있지만 안쓰는 것이 일반적이다.
① 직접 객체생성 불가
② 미구현함수는 모두 구현해 주어야 함
③ 구현함수는 앞에 반드시 퍼블릭 붙인다
5. 다중 인터페이스
interface Apple { public void fun1(); } interface Fruit { public void func02(); } class Orange implements Apple, Fruit { @Override public void func02() { } @Override public void fun1() { } }
5개, 6개, 7개까지도 받아서 쓰는 경우가 있다.
자바는 다중상속은 안되지만 다중 구현은 가능하다.
6. 상속과 다중 인터페이스
class Apple { } interface Fruit { public void func01(); } interface Orange { public void func02(); } class Kiwi extends Apple implements Fruit, Orange { @Override public void func02() { } @Override public void func01() { } }
상속과 구현을 같이
7. 인터페이스의 상속
interface Fruit { public void func01(); } interface Apple extends Fruit {// 구현은 불가하니까 상속으로 하셈 public void func02(); }
인터페이스도 상속이 가능하다
8. 내부 인터페이스
interface Apple { public void func01(); interface Fruit { // 인터페이스안에 인터페이스를만들수있다. public void func02(); } interface melon { public void func03(); } } class Orange implements Apple { // 내부 인터페이스(Fruit)는 없다고 사용하면 된다 @Override public void func01() { } class Kiwi implements Apple.Fruit { // 두개의interface가 상호 밀접한 관계가 있을때 @Override public void func02() { } // 내부 인터페이스 사용방법 } }
음식 interface - 한식, 중식, 양식 뭐이런 관계?
내부 인터페이스는 interface가 한개 이상들어가는 경우 사용한다.
9. 인터페이스 안에 클래스는
interface Apple { public void func01(); class Fruit { // interface안에 class public void func02() { System.out.println("롸?"); } }// 안에 있는 클래스없다고 생각하고 } class Orange implements Apple { @Override public void func01() { } } class Kiwi extends Apple.Fruit { // 둘이 밀접한 관계 }
10. 이너클래스의 메소드 사용하기
class Apple { public void func01() { } class Fruit { public void func02() { } } } public class Test { public static void main(String[] args) { Apple a = new Apple(); Apple.Fruit b = a.new Fruit(); a.func01(); b.func02(); } }
11. 인터페이스 구현하기
interface Apple { public void func01(); } class Fruit implements Apple { @Override public void func01() { } } public class Test { public static void main(String[] args) { Apple a = new Apple() { // 익명 class 잘 안써 @Override public void func01() { } }; new Apple() { // 익명 객체 많이써 : public void func01() { } }; new Apple() { // 익명 한번쓰고 버릴꺼양 public void func01() { } }.func01(); } }
인터페이스로 익명class, 익명객체 생성시키기.
public class Test { public static void main(String[] args) { Fruit ba = new Fruit(); new Apple() { // 객체가 없어서 메모리가 만들어졌다가 바로 사라진다. public void func01() { } }.func01();// 이렇게하면 함수를 콜할수이따. : 익명객체 (동적으로 생성했다가 필요없어지면 바로버려버림 } }
12. 함수의 매개인수로 인터페이스를 전달하고 그 인수로 코드(익명 클래스)를 전달하였다
interface Apple { public void func01(); } class Fruit { public void Func02(Apple apple) { System.out.println(1); apple.func01(); // 받은 apple을 사용한다 } } public class Test { public static void main(String[] args) { Fruit b = new Fruit(); b.Func02(new Apple() { // 함수의 인수로 '코드'를 전달해주었다. public void func01() { System.out.println(2); } }); Fruit bb = new Fruit(); bb.Func02(new Apple() { public void func01() { System.out.println("와웅"); } }); } }
13. class안에 인터페이스와 내부인터페이스의 구현과 사용
class Apple { // class안에 interface // public void Func01(); //이렇게 잘 안쓴다. interface Banana { public void func02(); } } class Orange implements Apple.Banana { @Override public void func02() { } } public class Test { public static void main(String[] args) { Orange o = new Orange(); o.func02();// 요렇게는 잘안쓰 Apple.Banana ab = new Apple.Banana() {// interface안에 interface를 이런식으로 구현할수있다. @Override public void func02() { System.out.println(1); } }; new Apple.Banana() { @Override public void func02() { System.out.println(2); } }; new Apple.Banana() { @Override public void func02() { System.out.println(3); } }.func02(); } }
15. 인터페이스 활용
interface Apple { public void func01(); } class Banana implements Apple { public void func01() { System.out.println("func1"); } } public class Test { public static void main(String[] args) { Banana b = new Banana(); b.func01(); Apple apple = new Apple() { // 바로 위의 객체생성과별개로 따로 생성해서 사용할수도있다. public void func01() { } }; new Apple() { public void func01() { } }; // -------- Banana bb = new Banana() { public void func01() { } }; // 이렇게하면 기존코드를 무시하고 자기 코드로 바꿔버림 } }
16. 추상 클래스와 인터페이스의 활용
interface Apple { public void func01(); } abstract class Banana implements Apple { // 이거는 interface안에 interface있는거랑 똑같당 public void func01() { } abstract void func02(); } public class Test { public static void main(String[] args) { Banana b = new Banana() { public void func01() { } void func02() { } }; new Banana() { public void func01() { } void func02() { } }; } }
17. 내부 인터페이스와 사용
class A { interface B { public void funcB(); A a = new A(); } A.C ac = new C() { void funcC() { }; } } interface C { public void funcC(); A a=new A(){ }; A.B ab=new B(){void funcB();}; }
18. 실제 예
class View { interface OnClickListner { public void OnClick(); } interface OnBoubleClickListner{ } } class Button { void SetOnClickLinstner(View.OnClickListner ab) { ab.OnClick(); } } public class Test{ public static void main(String[] args) { Button c = new Button (); c.SetOnClickLinstner(new View.OnClickListner () { public void OnClick(){ System.out.println(1); } }); } }
이게 안드로이드에서 셋온클릭리스너를 사용하는 문법이다
이런식으로 버튼을 클릭했을때 이벤트를 걸어서 처리하는 것에 사용한다.
클릭이벤트 -> 제일중요한거 익명객체 만드는 것
익명클래스와 익명객체를 만드는것이 제일 중요하다 봐둬라!
사이트의 정보
코딩하렴
으렴