Java Fundamentals – 추상 클래스
3778 단어 Java 기본 노트
추상류
개념: 만약에 어떤 클래스가 abstract 키워드에 의해 수식된다면 이 클래스는 추상 클래스이고 그 중에서 방법이 존재하고 방법도 abstract에 수식되고 내용이 없으면 이 방법은 추상 방법이다.개념이 어색하고 이해하기 어려우며 코드를 첨부합니다.
public abstract class AbstractClass {
public abstract void getLoca(int row, int col);
}
그 중에서 두 개의 매개 변수를 가진 getLoca 방법은 추상적인 방법이고 AbstractClass 클래스는 추상적인 클래스이다.추상, 무엇을 추상이라고 하는가, 실체가 없으면 추상이다.이 클래스에서 getLoca 방법은 이름만 있고, 형식과 파라미터를 되돌려주며, 구체적인 코드와 괄호 {}는 없습니다. 이것이 추상 클래스의 기본 정의입니다.
tips: 만약 방법이 abstract에 의해 수식된다면 이 클래스는 반드시 추상 클래스이고 그 하위 클래스는 모두 추상 클래스이다.getLoca 방법은 기본적으로 보이지 않습니다. (abstract 형식일 뿐입니다.) 따라서 실질적인 의미를 가지려면public이나 보호기로 수식해야 합니다.
구현 방법:
(1) 하나의 클래스가 이 추상적인 클래스에서 계승되고 그 중의 추상적인 방법을 보완한다.
import ps.laod.abstract_core.core.AbstractClass;
public class Demo extends AbstractClass {
private int row;
private int col;
public Demo() {
}
@Override
public void getLoca(int row, int col) {
System.out.println("[" + row + "," + col + "]");
}
@Override
public String toString() { // toString new ,
return "[" + row + "," + col + "]"; // toString
}
}
이런 방법은 이 종류에서만 코드를 쓸 수 있어 한계가 매우 크다.
(2) 이 추상적인 방법을 사용해야 할 때 보완하고 실례화한다
public class Test {
public static void main(String[] args) {
final int colllllll = 45;
final int rowwwwww = 60;
AbstractClass abc = new AbstractClass() {
@Override
public void getLoca(int row, int col) {
System.out.println("row col " + (rowwwwww + colllllll));
}
};
abc.getLoca(20, 20);
}
}
row col 105
를 출력으로 만듭니다.이를 통해 알 수 있듯이 실현된 getLoca 방법에서colllllllll 상수와rowwww 상수를 사용했다. 이것은 방법1이 할 수 없는 것이지만 적재 속도에 있어서 양자가 어떻게 다른지 모르겠다. 나는classLoader와 관련된 메커니즘을 좀 더 알고 다음에 다시 이야기해야 한다.
한 마디로 하면 현재 방법2는 더욱 좋은 적응성을 가지며 쓰기가 더욱 간편하기 때문에 우리는 대부분 방법2를 사용하여 추상적인 방법을 실현한다.
인스턴스 사용
현재 세 가지 종류를 정의하는데 그것이 바로 문, 철문과 방범문이다. 그 중에서 문은 추상류이다.세 가지 문은 다음과 같은 특징을 가지고 있다.
문: 열기, 닫기, 기능;
철문: 열고, 닫고, 튼튼하게;
방범문: 열어, 닫아.경보
package ps.laod.door;
public abstract class Door {
public abstract void open();
public abstract void close();
public abstract void function();
}
package ps.laod.alerm_door;
import ps.laod.door.Door;
public class AlermDoor extends Door{
@Override
public void open() {
System.out.println(" ");
}
@Override
public void close() {
System.out.println(" ");
}
@Override
public void function() {
System.out.println(" !");
}
}
package ps.laod.iron_door;
import ps.laod.door.Door;
public class IronDoor extends Door{
@Override
public void open() {
System.out.println(" !");
}
@Override
public void close() {
System.out.println(" !");
}
@Override
public void function() {
System.out.println(" ");
}
}
4
package ps.laod.door.demo;
import ps.laod.alerm_door.AlermDoor;
import ps.laod.iron_door.IronDoor;
public class Demo {
public static void main(String[] args) {
AlermDoor alermDoor = new AlermDoor();
IronDoor ironDoor = new IronDoor();
alermDoor.function();
ironDoor.function();
}
}
출력은 다음과 같습니다. !
이를 통해 알 수 있듯이 추상류문이 문을 나서는 기본적인 특징을 정의한 후에 그 자류가 실현되고 각 자류는 각자의 실현 방식이 있는데 이것이 바로 대상을 대상으로 하는 다태적 특성이다.
제한이 있음
상속 특성 때문에 모든 하위 클래스는 하나의 부류만 상속할 수 있기 때문에 응용의 한계를 초래한다.예를 들어 하나의 보물상자는 문의 스위치 기능을 가진 동시에 보석도 장식할 수 있고 물건을 저장할 수 있다. 이 두 가지는 보물상자의 특유한 성질이다. 만약에 추상류로 이 두 가지 성질을 넣으면 작은 문제를 크게 만들 수 없다.이것은 다태성을 실현할 수 있는 또 다른 도구인 인터페이스와 관련이 있다. 다음에 다시 이야기하자.