博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java面试知识点(二十三)抽象类和接口
阅读量:3780 次
发布时间:2019-05-22

本文共 1552 字,大约阅读时间需要 5 分钟。

参数 抽象类 接口
默认的方法实现 它可以有默认的方法实现 接口完全是抽象的。它根本不存在方法的实现
实现 子类使用 extends 关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 子类使用关键字 implements 来实现接口。它需要提供接口中所有声明的方法的实现
构造器 抽象类可以有构造器 接口不能有构造器
与正常 Java 类的区别 除了你不能实例化抽象类之外,它和普通 Java 类没有任何区别 接口是完全不同的类型
访问修饰符 抽象方法可以有 publicprotecteddefault 这些修饰符 接口方法默认修饰符是 public。你不可以使用其它修饰符。
main 方法 抽象方法可以有 main 方法并且我们可以运行它 接口没有 main 方法,因此我们不能运行它。
多继承 抽象方法可以继承一个类和实现多个接口 接口只可以继承一个或多个其它接口
速度 它比接口速度要快 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。
添加新方法 如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。 如果你往接口中添加方法,那么你必须改变实现该接口的类。

抽象类

  1. 抽象类中可以构造方法

  2. 抽象类中可以存在普通属性,方法,静态属性和方法。

  3. 抽象类中可以存在抽象方法,抽象方法不能有方法体。

  4. 如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。

  5. 抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。

  6. 抽象类不能被实例化,抽象类和抽象方法必须被 abstract 修饰

  7. 关键字使用注意:

    抽象类中的抽象方法(其前有 abstract 修饰)不能用 private、static、synchronized、native 访问修饰符修饰。

  8. 抽象类可以实现接口,但是抽象类不必实现接口的方法。

    但当抽象类不实现接口方法时,继承该抽象类的非抽象类必须实现抽象类的抽象方法和接口方法,但是当抽象类实现接口方法的时候,继承的类就不用在实现该方法了,本质上,接口和抽象类的方法都是abstract 方法,abstract 方法需要实现,沿着继承链一层层找一下,总要有实现该方法的类。

接口

  1. 在接口中只有方法的声明,没有方法体。
  2. 在接口中只有常量,因为定义的变量,在编译的时候都会默认加上 public static final
  3. 在接口中的方法,永远都被 public 来修饰,没有修饰的情况下默认是public abstract。
  4. 接口中没有构造方法,也不能实例化接口的对象。(所以接口不能继承类)
  5. 接口可以实现多继承 也就是 可以extends interfaceA,interfaceB,
  6. 接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法则实现类定义为抽象类。
  7. 接口可以继承接口,用 extends,但是接口不允许implements

注意:

抽象类 可以有 private 属性和 private 方法

原因:因为抽象类可以有自己方法实现,自己方法的实现可能会用到自己的私有变量。可以通过自身公有方法调用自身的私有方法。

接口中只能有全局常量和公共的抽象方法,不能有 private 属性和方法

匿名内部类可以不声明显式的对象而直接实例化抽象方法或者接口。

例如:

Runnable runnable = new Runnable(){
public void run(){
System.out.println("foo"); } };

转载地址:http://nslvn.baihongyu.com/

你可能感兴趣的文章
2. Spring定义继承parent
查看>>
3. Spring基于构造函数的依赖注入
查看>>
4. Spring 基于设值函数的依赖注入set注入
查看>>
Linux文件/目录管理(高级)
查看>>
你还不会Linux下的vi/vim编辑器吗?
查看>>
【干货】建议收藏! ! !全网最全的Python.openpyxl操作Excel数据
查看>>
Python如何将CSV文件转化为HTML文件?
查看>>
小白的我当年最得意的登录界面(JavaScript)
查看>>
计组期末复习题(3)
查看>>
计组期末复习题(4)
查看>>
计组期末复习题(5)
查看>>
计组期末开卷资料
查看>>
计组期末复习题获取
查看>>
c++(STL中一些常用操作)
查看>>
php(环境搭建)
查看>>
php(变量)
查看>>
php(单双引号的区别)
查看>>
php(数据类型)
查看>>
php(运算符及流程控制)
查看>>
php(自定义函数与系统自带函数)
查看>>