Java的三大特性,super与重写
三大特性相信大家都知道:封装,继承与多态
为什么Java需要这些特性呢,或者说为什么面向对象语言需要具备这些特性呢?
--------原因就是:高内聚,低耦合(内部的数据细节有自己完成,提供少量方法给外部使用),这样的程序在安全性与稳定性上也有了较好的保障。
特性之封装
封装 —属性私有(private),一般通过get/set方法来调用。
封装的意义?
- 提高程序的安全性,保护数据
- 隐藏代码的实现细节
- 统一接口
- 提高系统的可维护性
这些觉得太笼统了没关系,主要你要牢记在创建属性时最好全部搞成private就行了。
特性之继承(重)
所有的类都继承至Object,Object是起源—万物皆是对象
继承的本质就是对某一批类进行抽象,可类比于儿子继承爸爸的东西(属性于方法),儿子可以使用除开父亲隐私属性与方法的属性与方法,而父亲也能通过继承的关系使用到儿子除开隐私的属性与方法的重写方法,儿子独有的方法父亲想要使用则需要给点零花钱使得儿子贡献贡献(即类型转换,具体看多态)。
而说到继承,就不得不说到super,这是一个儿子的利器,它是使得儿子使用除开父类private的所有方法的关键,父类的某个方法完全满足了儿子对这个方法的需求的时候,儿子通过super就能直接用。
这里顺便提一嘴修饰符的级别 public < protectd < private (private是底线,除开本人谁都不能动)
super注意
注意点:
- 调用父类的构造方法,默认调用,若写了super(),需要放在代码的第一行
- super方法只能放在子类中t
- super与this不能同时调用构造方法
super 与 this 的比较
代表对象:this代表调用者本身,super代表父类对象的应用
使用前提:this适用于任何情况,super只能在继承的条件下
构造方法:this用于本类的构造,super用于父类的构造
特性之多态(重)
说到多态就得先了解重写,这是多态实现的基础
重写
重写是针对与具有继承关系的类的相同方法,父类的方法不满足子类的需求时,子类就需要对这个方法进行重写。
重写的方法一般都会有@Override这个注释
重写注意
- 方法名与参数列表必须相同
- 必须是静态方法
- 修饰符范围可以扩大但是不能缩小
- 异常范围可以缩小但是不能放大
多态
- 一个对象的引用类型是确定的
- 但是对象的指向类型不是确定的,父类的引用指向子类的类型
- 对象能用哪些方法看左边而不是右边—可用所有右边的类方法
- 右边的new对象若是重写了左边的类方法可直接用,独有方法就需要强制转换类型(通过instanceof函数可以知道类型是否相同)
属性没有多态,多态是方法的多态
类之间需要有继承关系才能进行类型转换
麻了,不知道咋说就上代码
//这里Water是父类,Coco是子类,Coco重写了Water的run(),runtain()是Coco的独有方法。
Water w1 = new Coco();
Coco coco = new Coco();
coco.run();
((Coco) w1).runtain();//父类想要使用子类的独有方法就得进行类型转换
w1.eat();
多态存在的条件
继承关系||子类对父类进行了方法的重写||父类指向引用了子类。
extends||@Override||Person person = new Student();
而不能被重写的方法:private(私有方法),final(常量方法),static(静态方法)