• 接口和抽象类


    一、接口

    接口相当于对外的一种约定和标准,比如为什么有操作系统,操作系统能屏蔽软件的复杂性和硬件的简单性之间的差异,为软件提供统一的标准。

    Java中,接口使用interface关键字来表示,比如我们可以定义这样一个接口:

    1 package day04;
    2 
    3  
    4 
    5 public  interface Job {
    6 
    7     void writeWell();
    8 
    9 }

    比如定义了Job接口,就可以在内部定义需要做的事情。接口的特征如下:

    • Interface接口是一个完全抽象的类,不会提供任何方法的实现,只会进行方法的定义。
    • 接口中只能使用两种访问修饰符,一种是public,表示它对整个项目可见;一种是default缺省值,它表示只具有包访问权限。
    • 接口只提供方法的定义,接口没有实现,但是接口可以被其他类实现。意思是接口的类需要提供方法实现接口,实现使用implements关键字表示,一个接口可以有多种实现。

    Demo.java

     1 package day04;
     2 
     3  
     4 
     5 class YangWriteWell implements Job {
     6 
     7     @Override
     8 
     9     public void writeWell() {
    10 
    11         System.out.println("Yang write is vary well!");
    12 
    13     }
    14 
    15 }
    16 
    17  
    18 
    19 class GaoWriteWell implements Job {
    20 
    21     @Override
    22 
    23     public void writeWell() {
    24 
    25         System.out.println("Gao write is vary well!");
    26 
    27     }
    28 
    29 }

    job.java

    1 package day04;
    2 
    3  
    4 
    5 public  interface Job {
    6 
    7     void writeWell();
    8 
    9 }
    • 接口不能被实例化,所以接口不能有构造方法,定义构造方法会出错。
    • 接口的实现比如实现接口的全部方法,必须定义为抽象类

    二、抽象类

    抽象类是一种抽象能力弱于接口的类,在Java中使用abstract关键字表示。如果把接口形容为狗,那抽象类可以理解为毛发是白色、小体的品种,而实现类可以是具体的类比如牧羊、泰迪等。

     1 package day04;
     2 
     3  
     4 
     5 public interface Dog {
     6 
     7     void FurColor();
     8 
     9 }
    10 
    11  
    12 
    13 abstract class BlackDog implements Dog {
    14 
    15     public void FurColor() {
    16 
    17         System.out.println("Fur is black");
    18 
    19     }
    20 
    21  
    22 
    23     abstract void SmallBody();
    24 
    25 }

    抽象类的特征如下:

    • 如果一个类中有抽象方法,那么这个类一定是抽象类,也就是用abstract修饰的方法一定是抽象方法,具有抽象方法的一定是抽象类。实现类只有具体方法的实现。
    • 抽象类中不一定有抽象方法,抽象类也能有具体的方法,这个根据实际情况确定。
    • 抽象类中的约束不像接口那么严格,可以在抽象类中定义构造方法、抽象方法、普通属性、方法、静态属性和静态方法。
    • 抽象类和接口一样都不能实例化,实例化只能实例化具体的类。
    欢迎批评指正,提出问题,谢谢!
  • 相关阅读:
    MySQL内连接和外连接
    MySQL 重命名数据库
    linux查看文件大小
    Linux合并两个文件夹内容
    Linux压缩和解压命令
    深度学习反向求导
    深度学习网络压缩模型方法总结
    cuda培训素材
    cuda编程-卷积优化
    交叉熵代价函数(损失函数)及其求导推导
  • 原文地址:https://www.cnblogs.com/xxeleanor/p/14350999.html
Copyright © 2020-2023  润新知