面线对象编程04. 抽象类和接口

抽象类和接口

抽象类

  • abstract修饰符可以用过来修饰方法也可以修饰类,如果修饰方法则该方法为抽象方法;如果修饰类则该类为抽象类。
  • 抽象类中可以有普通方法,但是有抽象方法的类一定要声明为抽象类。
  • 抽象类不能用new关键字创建对象,它是用来让子类继承的。
  • 抽象方法只有方法的声明而没有方法的实现,它是让子类去实现的。
  • 子类继承抽象类,必须要实现抽象类没有实现的所有抽象方法,否则该子类也要声明为抽象类。
  • 抽象类存在的意义:提高开发效率

下面来看一个抽象类的实例:

 abstract class AbstractClass {//abstract抽象类
    //抽象方法只有方法名字没有方法的实现,连方法体都没有!
    public abstract void doSomething();
}
class AbstractSon1 extends AbstractClass{
    //对于抽象类的所有方法,继承了它的子类都必须要实现它的方法,除非该子类也是个抽象类
    @Override
    public void doSomething() {
        System.out.println( "AbstractSon1实现了父抽象类的方法");

    }
}
//该子类也是个抽象类就不用实现其抽象父类的方法
abstract class AbstractSon2 extends AbstractClass {

}
/**
 * @ClassName Application
 * @Description TODO
 * @Author ${17368877923}
 **/
public class Application{
    public static void main(String[] args) {
        new AbstractSon1().doSomething();
    }
}
输出结果:
AbstractSon1实现了父抽象类的方法

接口

  • 普通类:只有具体实现
  • 抽象类:具体实现和规范(抽象方法)都有
  • 接口:只有规范!自己无法写方法 把约束和实现分离:面向接口编程~
  • 声明类的关键字是class,声明接口的关键字是interface
  • 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是。。则必须能。。”的思想。
  • 接口的本质是契约,制定好大家都遵守。
  • Object Oriented的精髓是对对象的抽象,最能体现这一点的就是interface. 为什么我们讨论设计模式都只针对具备了抽象能力的语言(c++、java等)去讨论,就是因为设计模式所研究的实际上就是如何合理地去抽象。

下面来看接口多继承的实例:

/**
 * @author 15065170282
 */
public interface UserService {
    //Interface体现了抽象的思维 ~java
    //interface都需要有一个实现类

    //接口中定义的常量前面都默认有public static final修饰符
    int AGE = 99;//常量全大写

    void add();
    void delete();
    void update();
    void query();
}
interface TimeService {
    void timer();
}
//实现类末尾用Impl结尾
//接口实现了多继承
class ServiceImpl implements UserService,TimeService{//类ServiceImpl继承了两个接口

    public static void main(String[] args) {
        //UserService接口中的方法
        new ServiceImpl().add();
        new ServiceImpl().delete();
        new ServiceImpl().update();
        new ServiceImpl().query();
        //TimeService接口中的方法
        new ServiceImpl().timer();
    }

    @Override
    public void add() {
        System.out.println("UserService接口中的add方法执行");
    }

    @Override
    public void delete() {
        System.out.println("UserService接口中的delete方法执行");
    }

    @Override
    public void update() {
        System.out.println("UserService接口中的update方法执行");
    }

    @Override
    public void query() {
        System.out.println("UserService接口中的query方法执行");
    }

    @Override//TimeService接口中的方法
    public void timer() {
        System.out.println("TimeService接口中的timer方法执行");
    }
}
输出结果:
UserService接口中的add方法执行
UserService接口中的delete方法执行
UserService接口中的update方法执行
UserService接口中的query方法执行
TimeService接口中的timer方法执行

接口小结

  1. 接口是一种约束,规定了一些规则让实现编程人员遵守;
  2. 接口定义的方法前默认加了public abstract关键字;
  3. 接口定义的属性(常量)前默认加了static final关键字,常量名字母全大写;
  4. 接口不能被实例化
  5. 接口中没有构造方法
  6. 每个接口必须有对应的实现类,实现类用implements关键字来实现接口,该实现类可以实现多个接口
  7. 接口实现类的类名结尾为Impl,且实现类中必须要重写接口中的所有方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clap of thunder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值