Java—抽象类与接口
一、抽象类
关键字abstract,继承:extends
为什么会用抽象类?是因为:当父类的一个方法对于多个子类都要重写时,那父类的这个方法就没有写的必要了,所以为了偷懒,直接一个abstract 方法名();
既然一个类中有抽象方法,那他必须是个抽象类。但是一个抽象类可以没有抽象方法
这里要提一嘴:不是不能被实例化,只是一般不能,如果非要,可以用匿名内部类来实现。
二、接口
关键字interface,实现:implements
为什么使用接口?原因是:当我们定义一个类时,不需要成员属性时,仅仅需要方法时。例如:我们要定义一个开锁的类,我们只想要开锁和上锁的方法而且可以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();
}
}
结果显示: