상속과 추상함수, 인터페이스의 활용
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);
}
});
}
}
이게 안드로이드에서 셋온클릭리스너를 사용하는 문법이다
이런식으로 버튼을 클릭했을때 이벤트를 걸어서 처리하는 것에 사용한다.
클릭이벤트 -> 제일중요한거 익명객체 만드는 것
익명클래스와 익명객체를 만드는것이 제일 중요하다 봐둬라!
'Programming Language > JAVA' 카테고리의 다른 글
숫자연산과 진법, String연산 (0) | 2019.07.17 |
---|---|
Lambda Expressions 람다식 (0) | 2019.07.17 |
삼항연산자의 활용 (0) | 2019.07.11 |
JAVA 설치하기 + 환경변수 설정 (0) | 2019.06.30 |
String... 이 뭐지? java 매개변수 ... (0) | 2019.06.04 |
사이트의 정보
코딩하렴
으렴