面向对象之接口

这篇文章为学习总结,总借了final,static,abstract,interface等的特性及对比

Final关键字

定义

最终的,可以修饰类,成员变量,成员方法

  • 修饰类,类不能被继承
  • 修饰成员变量,该变量就变成了常量,只能被赋值一次
  • 修饰方法,方法不能被子类重写

static静态

特点

  • 被类的所有对象共享(判断是否使用静态static)
  • 可以通过类名调用
  • 优先于对象存在,随着累的加载而加载

static 方法的访问特点及注意事项

静态方法的访问特点

  • 静态方法只能访问静态的成员变量和静态的成员方法
  • 静态方法的注意事项
    • 在静态方法中是没有this,super关键字的,静态的内容随着类的家在而加载,而this和super是随着对象的创建而创建。

abstract抽象类

抽象类的特点

抽象类和抽象方法必须用abstract关键字修饰

格式:

  • 抽象类
public abstract class 类名{
    
}
  • 抽象方法
public abstract void eat();
  • 抽象类不一定有抽象方法,有抽象方法一定是抽象类
  • 抽象类不能实例化

抽象类实例化的方法:

  • 按照多态的方式,有具体的子类实例化。(父类引用指向子类对象)

  • 这其实也是多态的一种,==抽象类多态==。

抽象类的子类

  • 要么是抽象类
  • 要么重写抽象类中的所有抽象方法

抽象类的成员特点

  • 成员变量

    • 可以是变量
    • 也可以是常量
  • 构造方法

    • 有构造方法,但不能实例化(可以父类引用指向子类对象)
    • 构造方法的作用:
      • 用于子类访问父类数据的初始化
  • 成员方法

    • 可以有抽象方法(限定子类必须完成某些动作)
    • 可以有非抽象方法(提高代码复用性)

接口

  • 用关键字interface表示
  • 格式:
public interface 接口名{
    
}
  • 类实现接口用implements表示
    • 格式:
public class 类名 implements 接口名{
    
}
  • 接口不能实例化

  • 接口实例化方法:

    • 按照多态的方式,由具体的实现类实例化。这其实也是多态的一种==接口多态==
  • 接口的实现类

    • 要么是抽象类
    • 要么重写接口中的所有抽象方法

接口的成员特点

  • 成员变量
    • 只能是常量(默认修饰符 public static final)
  • 构造方法
    • 没有,因为接口主要是扩展功能的,而没有具体存在。
  • 成员方法
    • 只能是抽象方法
    • 默认修饰符(public abstract)

类与类——类与接口——接口与接口的关系

  • 类与类
    • 继承关系,只能单继承,但是可以多层继承
  • 类与接口
    • 实现关系,可以单实现,也可以多实现。还可以在继承一个类的同时实现多个接口。
  • 接口与接口
    • 继承关系,可以单继承,也可以多继承。

注意

  1. Java类只支持单继承(√)
  2. Java只支持单继承 (×)

抽象类和接口的区别

  • 成员区别

    抽象类

    • 成员变量: 可以是变量,也可以是常量
    • 构造方法: 有
    • 成员方法:可以是抽象方法,也可以是非抽象方法

    接口

    • 成员变量:只能是常量(public static final)
    • 构造方法:无
    • 成员方法:只能是抽象方法
  • 关系区别

​ 类与类:继承关系,只能单继承,可以多层继承

​ 类与接口:实现关系,可以单实现,也可以多实现

​ 接口与接口:继承关系,可以单继承,也可以多继承

  • 设计理念的区别

​ 抽象类中定义的是继承体系的共性功能

​ 接口中定义的是该体系的扩展功能


==为什么子类的构造方法中第一行需要写super(); 呢?==

答:

因为子类继承父类,会继承父类的非私有成员。而子类在初始化的时候,可能会使用父类的数据,如果父类数据没有先初始化, 子类就不能使用这些数据,因此,在子类初始化之前,一定要先完成父类数据的初始化。


什么时候用Cat c = new Cat();

什么时候用Animal a = new Cat();

你可能感兴趣的:(面向对象之接口)