【Java学习】抽象类与接口

面向对象系列四

一、抽象方法

二、抽象类

三、意义检查

1.抽象方法的意义

2.意义检查

体现

四、接口

1.级别层次

2.接口变量

3.意义

4.成员

成员变量:

成员方法:


一、抽象方法

没有方法体 即没有任何实现的方法 是抽象方法只有在抽象类中 才有更多的允许,允许上这种方法的存在,所以 抽象方法只能存在于 抽象类中,但一个抽象类 不是一定就有抽象方法的,它只是允许

  • 抽象方法 在将来被使用时 一定是被重写的,所以它一定是 非静态的、不能被final、private修饰的

二、抽象类

抽象类是 允许抽象方法存在 的类,所以是 不能直接对着抽象类 类变量 创似复刻变量,但可通过 作为 父类继承于子类,对着子类 类变量 创建似复刻变量 来间接创上有 父类抽象类类变量的 似复刻变量,抽象类与普通类相比,只是多了层 里面抽象方法的存在允可,但也因此失去了 对着其直接创似复刻变量 直接实例化的能力其它的 与普通类都一样(它也有构造方法 但构造方法的调用 都是在间接实例化 创似复刻变量时 帮助父类构造 调用的,直接实例化创似复刻变量 无)

三、意义检查

1.抽象方法的意义

抽象方法就是为了解决被重写方法方法体内容无效就不需要存在而去省略,达到的代码简洁与同时加上了编译器本达不到的为重写目的的编译检查

2.意义检查

编译器对无方法体的方法有严格的意义检查因为它本身的实现是无意义的,唯一有意义的地方就在于重写如果在将来无方法体的抽象方法在去使用时一旦没达到重写的效果,编译器的检查就会对它报错,因为它的存在无意义且被捕捉到了(编译器一直对抽象方法有监视)

体现

  • 在上面的实例化时无法直接创建含有抽象方法的类变量的似复刻变量也是意义检查下的体现,不能对它直接实例化的原因是因为直接实例化无意义,而被继承创子类时,间接实例化创有子类类变量的似复刻变量可对它向上转型实现方法重写的间接实例化有意义而被允许
  • 创建抽象方法、创建抽象类来允许存放下抽象方法编译器允许它们存在的意义也就是为了能实现抽象方法的代码简洁与重写检查这些好处的意义当抽象方法所在的抽象类被继承时,抽象方法就开始在可被使用范围了,如果此时抽象方法没有在父类被继承下被重写,编译器会对其无意义的报错提示

所以编译器都是在有规定意义的检查下进行的(编译器意义检查的这些意义都是有先已规定确定下来的供检查用的)

四、接口

1.级别层次

接口与类是同级别同层次的:

  • 接口类型与类类型同级别同层次接口类型interface创建接口变量类类型class创建类变量
  • 接口变量与类变量也是同级别同层次的

2.接口变量

接口变量是抽象类类变量的抽象升级版 

相同点

  • 接口变量与抽象类类变量一样都有加层抽象成员的存在允可但不一定就一定有抽象成员的,与抽象类一样,在这层抽象成员存在允可下它不能被直接实例化直接创似复刻变量接口变量实例化创它的似复刻变量也是只能通过间接来实例化

不同点

  • 与抽象类类变量不同的是,接口类变量内部不能有代码块、构造方法,因为它的成员变量有的话只有静态常量,而静态常量是不能被修改的

代码块、构造方法是主要目的是用来对成员变量进行赋值的,如果一个类已明确它的成员变量是不能被修改再赋值的,里面再来构造方法、代码块就是无意义的)


3.意义

接口变量存在时的有意义是准备当作接口的有意义,被使用时的有意义是里面所有的抽象方法都有接口当作父类被继承被都被重写的有意义


4.成员

成员变量:

成员变量有都被static final隐式补全修饰,接口里的变量都是静态变量变成的静态常量,都必须都要初始化


成员方法:

  • 无方法体的抽象方法都有被abstract隐式补全修饰(抽象方法都是非静态的)
  • 自己加static非抽象有实现的静态方法
  • 自己加default非抽象有实现的非静态方法

隐式补全修饰:

接口变量里所有成员的访问权限是public且都有被public隐式补全修饰

(变量主体的所有部分、方法主体的所有部分都不会有自动补全都必须写完整,只有那些访问修饰符状态修饰符finalabstract这些修饰符有出现默认修饰自动补全不用写默认有修饰的情况

评论 46
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值