抽象类与接口

抽象类

加了abstract就是抽象类了,既然是类就是单继承

  1. 不能new这个抽象类,只能靠子类实现它:约束
  2. 抽象类里可以写普通类
  3. 抽象方法必须写在抽象类中

抽象类就是抽象的抽象:即约束

思考题?

  1. 既然他不能new对象,那么他存在构造器吗? 有构造器
  2. 抽象类存在的意义是什么? 方便重写(他会要求你必须重写),提高开发效率
package OOP02.Demon7;
//abstrac 抽象类
public abstract class Action{
    //抽象类的构造方法
    public Action() {
    }

    //约束 有人帮我么实现,现在方法体可以不写
    //abstra 抽象方法,只有抽象的名字,没有方法的实现
    public abstract void doSomething();
}
package OOP02.Demon7;
//Ninja继承与抽象类的父类Action需要重写父类的所有方法
//除非子类自身也是一个抽象类,则不需要重写,而留给子类的子类重写
public class Ninja extends Action{

    @Override
    public void doSomething() {

    }
}

接口

普通类:只有具体的实现

抽象类:具体的方法和规范(抽象方法)都有

接口:只有规范自己无法写方法 ——专业的约束,约束与实现的分离:面向接口的编程。

接口就是规范,定义的是一组规则,体现了现实世界中“如果你是什么,则必须能什么”的思想

接口的本质是契约,就像法律,制定好后大家都遵守

声明接口的关键字是interface

接口中的所有方法的定义其实都是抽象的 public abstract关键字是默认的,可以不加

package OOP02.Demon8;
//接口都需要有实现类
public interface UserService {
    //接口中的所有方法的定义其实都是抽象的 public abstract
    void add(String name);
    void delete(String name);
    void updata(String name);
    void query();
    public abstract void fun();
}

接口都需要有实现类:

实现类关键词implement

public class UserServiceImpl implements UserService

标准的实现类的声明方法↑

package OOP02.Demon8;
//实现类的标准的命名规则 实现类关键词implement
//xxImpl类名 实现 xx接口
public class UserServiceImpl implements UserService{
    @Override
    public void add(String name) {

    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void updata(String name) {

    }

    @Override
    public void query() {

    }

    @Override
    public void fun() {

    }
}

实现类需要重写接口中的所有方法(实现它)

利用接口实现多继承:

实现类UserServiceImpl,可以实现多个接口(与父子继承的单继承不同),实现的接口在声明中使用逗号隔开。和之前说的一样,接口的所有方法都需要在实现类中重写,否则报错。

可以通过接口定义一个系统

接口总结

作用

  1. 约束
  2. 定义一些方法,让不同的(打工)人实现
  3. 方法是public abstract的
  4. 属性是public static final的
  5. 接口不能被实例化,接口中没有构造方法,只能被实现类实现
  6. implement可以实现多个接口
  7. 必须重写接口中的方法
posted @ 2020-11-08 17:56  SshadowHeart  阅读(69)  评论(0)    收藏  举报