面向对象之封装、继承和多态

1.什么是封装

什么是封装:封装是一种设计思想,告诉我们如何正确的设计对象的属性和行为,对象代表什么就得封装对应的数据,并提供数据对应的行为。

封装的设计规范:合理隐藏,合理暴露

封装就是把对象的所有组成部分组合在一起,使用访问控制符把类中该隐藏的数据隐藏起来,控制用户对类的修改和访问数据的程度。

作用:适当的封装可以让代码更容易理解和维护,也加强了代码的安全性。

2.访问控制符

访问控制符用来控制父类、子类之间,不同的包中的类之间的数据和方法的访问权限。包括private、默认(default)、protected、public四种类型,其访问权限如下:

访问控制符

同一类中

同一包中

同一子类中

其他

private

default

protected

public

3.继承

3.1什么是继承

Java中使用关键字extends来让一个类和另一个类建立起父子关系

例如:public class Student extends Person{}

Student成为子类(派生类),Person成为父类(基类或者超类)

3.2继承的好处

一旦有了父子关系,子类可以使用父类的非私有成员(成员变量、成员方法)

可以把多个子类的重复代码抽取到父类中,提高代码的复用性。

3.3什么时候用继承

当类与类之间存在相同的内容,并且满足子类是父类的一种就可以使用继承来优化代码

4.继承的注意事项

4.1单继承

Java中的类是单继承的,不支持多继承(一个子类继承多个父类),但是支持多层继承(子类继承父类的父类……)

4.2 Object类

Object是所有Java类的祖宗类,任何一个类都可以直接或者间接继承他

所以Object类中的所有非私有成员,子类都可以使用。

4.3 子类能继承父类的哪些内容

1.构造方法:父类的构造方法无论私有与否,子类都不能继承,但是可以使用非私有的构造方法

2.成员变量:加载子类字节码文件的时候,会先加载父类字节码文件

子类的对象由子类和父类两个共同创建

当父类的成员变量私有化之后,创建子类对象时也包含父类的成员变量,只不过不能使用

父类的成员变量无论私有与否,子类都能继承,但是只能使用非私有的成员变量

3.成员方法:子类只能继承和使用父类的虚方法

虚方法指的是:非私有的,非静态的,非final修饰的

4.4子类中访问其他成员变量的特点

1.在子类访问其他成员变量和成员方法是按照就近原则的:

先在子类局部范围找

然后在子类成员范围找

然后父类成员范围找

父类范围还没找到就会报错

2.如果子类和父类中出现了重名的成员,会优先使用子类的,如果此时一定要用父类的成员,可以通过super关键字来指定访问父类的成员,格式:super.父类成员变量/成员方法

4.5方法重写

4.5.1什么是方法重写

当子类觉得父类的某个方法不好用或无法满足自身的需求时,子类可以重新写一个跟父类的方法名称相同、参数列表一样的方法,去覆盖父类的方法,这就是方法重写。

重写后,Java会遵循就近原则

4.5.2方法重写的注意事项

重写时候可以用Override注解,来检查我们的方法重写格式是否正确

子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限

子类重写方法的返回值类型必须小于或者等于父类方法的返回值类型,这里的类型只能是引用类型

父类的私有方法、静态方法子类不能重写

4.6继承关键字super

this是指当前对象引用,super是指当前对象的父类对象的引用。由于继承子类可以访问父类的成员,所以this除了可以访问自己的成员还可以访问父类的成员,但是为了明确的指明访问的是父类的成员,则要用关键字super来指定

3.7子类构造函数的特点

子类的全部构造方法都会先调用父类的构造方法,再执行自己

默认情况下,子类全部构造方法的第一行代码都是super()(写不写都会有),他会调用父类的无参数构造方法

如果父类没有无参数的构造方法,则我们必须在子类构造方法的第一行手写super(……)来指定调用父类的有参数构造方法

引入继承后,子类对象是由父类和子类共同设计的,父类属性的初始化只有父类自己清楚,所以我们要先调用父类的构造方法来完成父类的属性初始化,然后再调用子类的构造方法来完成子类的属性初始化

this和super都只能放在构造方法的第一行,因此this和super不能共存

5.多态

5.1什么是多态

多态指的是继承或者实现关系下的一种。表现为:对象多态、行为多态

5.2多态的代码提现

在person类中声明一个run()方法

在其子类Student和teacher中可以使用:

People p = new Student();

p.run();

People p = new Student()

p.run();

5.3多态的两种体现

对象多态:同一个对象有多种形态,即父类引用指向子类对象

行为多态:同一个方法因为调用对象不同表现出不同的形态

5.4多态的前提

有继承或者实现关系

存在父类引用指向子类对象

存在方法重写

5.5多态访问成员变量的例子

成员变量:编译和运行都看左边(父类)

成员方法:编译看左边(父类),运行看右边(子类)

5.6多态的好处

定义方法时,使用父类的形参,可以接受一切子类对象,使程序的扩展性更强。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值