Java-抽象クラスとインターフェイス
1つの抽象クラス
キーワード概要、継承:拡張します
なぜ抽象クラスを使用するのですか?その理由は、親クラスのメソッドを複数のサブクラスに対して書き直す必要がある場合、親クラスのこのメソッドを書く必要がないため、怠惰になるために1つだけです。抽象メソッド名();
クラスには抽象メソッドがあるため、抽象クラスである必要があります。しかし、抽象クラスは抽象メソッドを持つことができません
ここで言及したいのは、インスタンス化できないということではありませんが、一般的にはインスタンス化できないということです。必要に応じて、匿名の内部クラスを使用して実装できます。
第二に、インターフェース
キーワードインターフェース、成し遂げる:実装
なぜインターフェースを使うのですか?その理由は、クラスを定義するとき、メンバー属性が必要ないときは、メソッドだけが必要だからです。例:ロック解除クラスを定義したい、ロック解除メソッドとロックメソッドのみが必要で、buにすることができ、属性は必要ありません。便宜上、これは特にインターフェースとして定義されています。
抽象クラスとインターフェース:
次に例を示します。
//接口-锁-只有上锁和解锁功能
public interface Lock {
int i = 10; //接口中只有静态常量,public static final类型,可以不写
void lockUp(); //接口里面的方法是public abstract类型,可以不写
void lockDown();
}
//抽象类-门-只有关门和开门
public abstract class Door {
public abstract void open();
public abstract void close();
}
//类-安全门-有前面两个功能
public class SafeDoor extends Door implements Lock {
@Override
public void open() {
System.out.println("推一下,门开了");
}
@Override
public void close() {
System.out.println("拉一下,门关了");
}
@Override
public void lockUp() {
System.out.println("钥匙扭一扭,锁开了");
}
@Override
public void lockDown() {
System.out.println("钥匙扭一扭,锁关了");
}
}
//类-户主-实现正常进出门和开关门
public class Owner {
private String name;
private SafeDoor safeDoor = new SafeDoor();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void getIn(){
System.out.println(this.name+"来到门前,掏出钥匙");
safeDoor.lockUp();
safeDoor.open();
System.out.println("进入房间");
}
public void getOut(){
System.out.println("走出房间");
safeDoor.close();
System.out.println("门已经关上");
safeDoor.lockDown();
System.out.println("门已经上锁");
}
}
//测试类
public class TestOwner {
public static void main(String[] args) {
Owner owner = new Owner();
owner.setName("刘德华");
owner.getIn();
owner.getOut();
}
}
結果は次のことを示しています。