抽象类与接口

抽象类

  • 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类

  • 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量成员方法构造方法的访问方式和普通类一样

  • 用abstract修饰的类就是抽象类

  • 如果某个类中包含有抽象方法,那么该类就必须定义成抽象类

  • 如果一个类是抽象类,但不一定有抽象方法

  • 构造方法和静态方法不可以修饰为abstract

抽象方法

  • 抽象方法是一种特殊的方法:它只有声明,而没有具体的实现
  • 抽象方法必须用abstract关键字进行修饰

如果一个继承了抽象类:

  • 要么重写抽象类中的所有方法
  • 要么将当前类也声明为抽象类

抽象类不能创建对象

接口

  • 使用interface关键字实现接口
  • jdk8以后接口还可以定义静态方法,默认方法
  • 接口中的默认方法可以通过子类对象访问
  • 静态方法还是通过接口名访问
public interface MyInterface {
       int num = 10; //所有属性默认为: public static final


 public  void  foo()//所有方法都是:public abstract

    //其他方法
}

接口特性

  • 接口不可以被实例化
  • 实现类必须重写接口中的所有方法
  • 实现类可以实现多个接口
  • 接口中的变量都是静态常量

接口存在的意义

java中一个类只能有一个父类,所以用接口可以实现多继承的逻辑

从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量方法的定义,而没有变量和方法的实现

接口的定义

interface关键字用来声明一个接口

[访问修饰符] interface 接口名称 [extends 其他的接口名1,….其他的接口名n] {

​ // 声明常量

​ // 抽象方法

}

接口的使用

类使用implements关键字实现接口。

在类声明中,Implements关键字放在class声明后面。

[访问修饰符] class 类名 implements 接口名1,接口名2……{ }

接口的特性

  • 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字
  • 接口中每一个方法也是隐式抽象的,默认为public abstract
  • 接口中声明的属性默认为public static final 的
  • 接口不是被类继承了,而是要被类实现
  • 接口不能实例化对象(无构造方法),但可以声明对象的引用(多态性)
  • 多个类可以实现同一个接口
  • 一个类可以实现多个接口,但只能继承一个类
  • 与继承关系类似,接口与实现类之间存在多态性
  • 一个接口能继承其它多个接口
  • 当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类

接口与抽象类的区别

语法上的区别

  • 抽象类里可以有构造方法,而接口内不能有构造方法
  • 抽象类中可以有普通成员变量,而接口中不能有普通成员变量
  • 抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的
  • 抽象类中的抽象方法的访问类型可以是public,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public 、abstract类型
  • 抽象类中可以包含静态方法,接口内不能包含静态方法
  • 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义
    静态常量

相同点

抽象类和接口都不能用来创建对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值