Java---抽象类与接口

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();
    }
}

结果显示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43288259/article/details/112915583