抽象类与接口

抽象类

当父类的某些方法,需要声明,但是又不知道如何实现时(即不知道方法内部写什么内容时),可以将其声明为抽象方法,具有抽象方法的类就必须定义为抽象类,抽象类存在多态现象

用abstract关键字来进行修饰的类和方法称之为抽象类和抽象方法,如果一个类中的方法被定义为了抽象方法,则这个类必须被定义为抽象类,如果一个类被定义为了抽象类,则类中可以有也可以没有抽象方法

抽象类写法: 修饰符 abstract class 类名 { 代码...... }

抽象类其实就是一个类,抽象类是一个特殊的类,它可以定义普通类所能定义的一切,抽象类和普通类最大的区别就是抽象类不能够创建对象,也就是不能够实例化

抽象类是不能够实例化的(不能创建对象的),也就是不能用抽象类来创建对象,因为抽象类的作用其实就是一个模板作用,抽象类存在的意义其实就是为了被继承

abstract关键字只能修饰类和方法,不能修饰属性和其他的内容

抽象方法写法: 修饰符 abstract 返回值类型 方法名(参数);

抽象方法所属的类一定要是抽象类,即具有抽象方法的类一定要使用abstract修饰为抽象类,抽象类中不一定非要有抽象方法,也可以没有抽象方法的,抽象类自己无法创建对象,但是可以通过继承让子类使用抽象类(父类)中的内容

抽象方法没有(不能使用){}花括号,也就是抽象方法没有内容,没有它自己的代码块(方法体)

抽象方法如果没有写任何的访问权限修饰符的话,访问修饰符权限默认都是public的

如果一个普通类继承了抽象类,则普通类必须实现(重写)抽象类的所有抽象方法,将抽象类中的抽象方法在子类中实现(重写)为带有{}花括号(方法体)的方法,方法的修饰符、返回值类型、方法名、参数必须都一致而且不能有abstract关键字修饰,除非那个类也使用abstract关键字修饰为了抽象类(抽象子类)

如果一个抽象父类继承了一个抽象子类,那么这个抽象子类可以不实现(重写)抽象父类的抽象方法,但是下一次一个普通类继承了抽象子类的话,需要将抽象父类和抽象子类的所有抽象方法全部实现(重写)

抽象方法不能使用private关键字、final关键字、static关键字修饰,因为这些关键字修饰的方法都是不可以进行重写的,也就是和重写相违背

接口

usb插槽其实就是一个现实中的接口,接口其实就是声明出了一些抽象方法(没有方法体的方法)与常量,即没有{}花括号(方法体)的方法,到了某个类要使用的时候,再根据具体情况把这些方法实现(重写)出来(实现方法的方法体),即实现{}花括号(方法体)

接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用,Java中,接口可以看成是多个类的公共规范,是一种引用数据类型

接口不是类,接口中没有构造方法,接口也是一种引用数据类型,接口的类型就是它的接口名,接口存在多态现象(也可以发生向上向下转型,动态绑定等等)

接口是一种引用数据类型,但是接口并不能直接new接口的对象,因为接口并不是类,只有类(非抽象类)才能new对象,但是接口可以定义接口类型的变量接收一个实现接口的类的对象,形成向上转型的功能

接口不是类(无构造方法),但是编译后也会单独生成字节码文件,生成的字节码文件也是.class的

接口的写法: 修饰符 interface 接口名 { 代码..... }

具体实现的类写法: class 类名 implements 接口名,接口名2 { 代码...... }

继承类和实现接口同时发生写法: class 子类名 extends 父类名 implements 接口名,接口名2 { 代码..... }

接口继承(拓展)多个接口写法: interface 接口名 extends 接口名2,接口名3 { 代码..... }

继承类和实现接口同时发生时必须先继承类,后实现接口,即extends和implements可以共存,extends在前,implement写在后

在接口中,一般定义抽象方法,在接口中定义抽象方法不需要定义抽象类,定义的抽象方法可以省略abstract关键字+public修饰符,编译时编译器会自动为抽象方法添加上abstract关键字+public修饰符

接口中的所有定义的(非默认方法和静态方法)方法都是public修饰符+abstract关键字修饰的方法,接口中的所有方法都可以省略public修饰符+abstract关键字,编译时编译器会自动为方法添加上public修饰符+abstract关键字

在接口中还可以定义属性(成员变量),所有的属性都是public+static+final三个修饰符修饰的,接口中public+static+final三个修饰符可以省略,编译时编译器会自动为方法添加上public+static+final三个修饰符,接口中属性的使用方式是:接口名.属性名,接口中的属性必须直接初始化,类实现接口的时候,会将接口中的所有属性全部继承到类中

接口是不能够实例化的(不能创建对象的),也就是不能用接口来创建对象,因为接口的作用和抽象类类似其实就是一个模板作用

如果一个普通的类要实现接口,就必须将该接口中所有的抽象方法都实现(重写)出来,如果一个抽象类要实现接口,那么它可以不用实现接口的抽象方法

一个类是可以同时实现(同时implements)多个接口的,一个类同时实现多个接口,其实就达到了其他语言当中的多继承的作用,也就是一个类需要同时实现(重写)多个接口中的所有的抽象方法

接口不能继承类,但是接口是可以继承多个其他接口的(extends多个接口),也就是接口和接口之间是可以继承的,而且一个接口可以继承多个其他接口,普通类实现接口时需要将接口及其继承的接口的所有抽象方法全部实现出来

接口的访问权限修饰符只能是public和默认修饰符的,这和类可以使用的访问权限修饰符是一致的

接口是一种引用数据类型,但是接口并不能直接new接口的对象,因为接口并不是类,只有类(非抽象类)才能new对象,但是接口可以定义接口类型的变量接收一个实现接口的类的对象,形成向上转型的功能

JDK8以后,在接口中,还可以定义带{}花括号(方法体)的默认方法和静态方法,写法如下:

定义默认方法: default 修饰符 返回值类型 方法名(参数) { 代码..... }

定义静态方法: 修饰符 static 返回值类型 方法名(参数) { 代码..... }

接口的默认方法可以通过实现接口的类的对象来进行调用,接口的静态方法可以通过:接口名.方法名(参数)来进行调用,接口的属性可以通过:接口名.属性名来使用

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值