接口和抽象类

抽象类

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

2.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口

3.抽象类不能实例化,按多态的方式,由具体的子类实例化。(不能实例化即 Animal a=new Animal 会报错,因为抽象类里没有具体方法的实现,调用它没有意义

4.抽象类的子类要么是抽象类,要么重写抽象类中的所有抽象方法

抽象类的成员特点

1.成员变量:既可以是变量,也可以是常量。abstract不能修饰成员变量

2.构造方法:有,用于子类访问父类数据的初始化

3.成员方法:既可以是抽象的,也可以是非抽象的
成员方法特性:抽象方法 --> 强制要求重写
非抽象方法 --> 子类继承的事情,提高代码复用性

PS:小问题:一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
答:可以,这么做目的只有一个,就是不让其他类创建本类对象,交给子类完成

abstract不能和哪些关键字共存?

1.abstract 和 static:被abstract修饰的方法没有方法体
被static修饰的可以用类名. 调用,但是类名. 调用抽象方法是没有意义的

2.abstract和final:被abstract修饰的方法强制子类重写
被final修饰的不让子类重写,所以它俩是矛盾的

3.abstract和private:被abstract修饰的是为了让子类看到并强制重写
被private修饰不让子类访问,所以它俩是矛盾的

abstract class Demo {
public static abstract void print(); //错误:非法的修饰符组合:abstract和static
public final abstract void print(); //错误:非法的修饰符组合:abstract和final
private abstract void print();} //错误:非法的修饰符组合:abstract和private

接口

如果一个抽象类里全是抽象方法的话可以直接写成一个接口,接口中不能定义非抽象方法

接口特点

1:接口用关键字interface表示 ----> interface 接口名{ }

2:类实现接口用implements表示 -----> class类名 implements 接口名

3:接口不能实例化(因为调用抽象方法没有意义,若需实例化则按照多态的方式来实例化)

4:接口的子类 :可以是抽象类,但是意义不大。
​ 可以是具体类,要重写接口中的所有抽象方法。(推荐方案)

接口的成员变量

只能是常量,并且是静态的公共的

默认修饰符:public static final(顺序可以调换)

构造方法:接口没有构造方法

成员方法:只能是抽象方法,
默认修饰符:public abstract(接口是暴露的,所以是public )

类与类、类与接口、接口与接口的关系

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

类与接口:实现关系,可以单实现,也可以多实现,并且可以在继承一个类的同时实现多个接口

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

多实现写法:

Class Demo implements InterA,InterB{  } --> 正确
​Class Demo implements InterA,implements InterB{  } --> 错误

多继承写法:

Class Demo extends InterA,InterB{  } --> 正确
Class Demo extends InterA,extends InterB{  } --> 错误

接口与抽象类的区别

A: 成员区别

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

接口: 成员变量:只可以常量
成员方法:只可以抽象

B:关系区别

类与类:继承,单继承

类与接口:实现,单实现,多实现

接口与接口:继承,单继承,多继承

C:设计理念区别

抽象类被继承体现的是:“is a”"的关系。抽象类中定义的是该继承体系的共性功能。

接口被实现体现的是:"like a"的关系。按口中定义的是该继承体系的扩展功能。
一个类不写任何继承类默认继承object类

PS:抽象类是用来继承的,接口是用来实现的,抽象类可以实现接口(方法体中为空),再由其子类对接口进行具体的实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值