zoukankan      html  css  js  c++  java
  • Java 接口与抽象类

    抽象类

    《JAVA编程思想》一书中,将抽象类定义为“包含抽象方法的类”。只要用abstract修饰的类就是抽象类,抽象类不一定包含抽象方法,但有抽象方法的类一定是抽象类。抽象方法是用abstract关键字修饰的方法,不用实现方法细节,由继承了它的子类去实现。

    [public] abstract class ClassName {
        abstract void fun();
    }
    

    抽象类注意三点:

    • 抽象方法必须为public或protected,因为private无法被子类继承,就无法实现该方法,默认为public.
    • 抽象类不能创建对象.
    • 如果子类继承的父类是抽象类,而没有实现它的抽象方法,那么子类也必须修饰为abstract.

    接口

    接口(interface)在软件工程泛指供别人调用的方法或函数。在Java中,接口是一种行为的抽象,比抽象类更加抽象的极度抽象类型,接口中定义的变量都会被修饰为public static final,而且必须赋初值,因此接口中只有常量;接口中的方法只能是public abstract修饰的,其它的会报错。

    [public] interface InterfaceName {
        public static final String s = "hello";
        public abstract void fun();
    }
    

    接口注意两点:

    • 接口用于描述系统对外提供的所有服务,因此接口中的成员常量和方法都必须是公开(public)类型的,确保外部使用者能访问它们
    • 接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量,只有静态(static)变量,被final修饰后就变为了常量。

    接口与抽象类的区别

    语法层面

    1. 抽象类可以提供成员方法的实现细节,而接口只有抽象方法
    2. 抽象类可以有各个类型的成员变量,而接口只有public static final型的
    3. 抽象类中可以有静态和非静态代码块,而接口不行
    4. 一个类只能继承一个抽象类,可以实现多个接口

    设计层面

    抽象类是一种事物的抽象,而接口是一种行为的抽象。简单来说,抽象类为继承的子类提供了一个模板,子类根据实际需求实现不同的细节,就像Android开发中为Activity绑定Fragment的过程,许多代码都是不变的,只是实现不同的Fargment实例,这就可以创建一个抽象类,将创建实例的过程定义在抽象方法中,而其它的部分定义在普通方法中,大大减少了代码量;接口相当于定义了一个行为,比如Fly,Bird类可以实现这个接口,拥有飞的行为,而Dog类则不行。继承关系强调“是不是”,而接口强调“有没有”。

    接口的写法

    接口不能实例化,也就是直接new出来,但我们常会看到这两种写法

    
    List<String> list = new ArrayList<>();
    
    public Runnable r = new Runnable()
    {
        @Override
        public void run()
        {
           //Details
        }
    }
    

    前一种是Java的多态,list可以指向实现它的接口的类;后一种是匿名内部类的写法,详解见Java--匿名内部类

  • 相关阅读:
    前端构建工具gulp入门教程
    写网站经常需要用到的代码汇总
    前端需要掌握的知识
    百度搜索功能
    Photoshop教程
    1.电脑系统重装
    ansible安装二进制kubernetes-1.14.1
    Ansible-基础
    kubernetes之监控Operator部署Prometheus(三)
    kubernetes之监控Prometheus实战--邮件告警--微信告警(二)
  • 原文地址:https://www.cnblogs.com/authetic/p/9063944.html
Copyright © 2011-2022 走看看