java面向对象进阶2:封装和继承

封装

对象代表什么,就需要封装对应的数据,并提供数据对应的行为

继承

通过extends关键字,可以将类与类之间建立关系

子类(派生类)–>父类(基类或超类)

继承的好处

1,子类中重复的代码可以抽取到父类中,

无需重新写一遍,提高代码复用性

2,在父类基础上,子类可以增加其他功能,使子类更强大

设计继承类

1,类与类之间存在共性,满足子类是父类的一种,就可以考虑使用继承来优化代码

2,可以使用画图法进行设计

设计时从下往上设计,编写时从上往下编写

eg: student->person

​ teacher->

权限修饰符

private:本类

缺省:本包中的类

protected:本包+子孙类

public:无限制

继承的特点

1,java只能单继承,一个子类只能继承一个父类

2,可以多层继承,A->B->C

A仍是C的子类,C是A的间接父类

所有类都间接或直接的继承于Object类

子类只能访问父类中非父类的属性

子类能继承父类中的哪些内容
1,构造方法

既不能继承私有也不能继承非私有(违背构造方法定义规则,名字与类名不同)

2,成员变量

能继承私有(但不能调用)也能继承非私有

如果为私有,不能直接调用,只能用getset方法使用

3,成员方法

能继承非私有但不能继承私有

虚方法:非private,非static,非final的方法称为虚方法

当子类继承父类时,会获得父类的虚方法表并添加自己的新方法,当子类再被继承时,会将添加了自己新方法的虚方法表传递下去

继承的内存原理

在创建子类对象时,会在方法区中载入子类字节码文件,再载入父类的字节码文件,直到载入Object类的字节码文件

在创建子类对象时,会在堆内存中开辟两块空间(地址相同),一块存放子类的变量,一块存放父类继承的变量,调用变量时会先从子类空间找,再从父类继承下来的空间找.

继承中属性的特点
成员变量的访问特点

直接调用->就近原则

就近原则,谁近用谁

先在局部域找,然后在类中找,再去父类中找

this调用->成员变量

super调用->父类的成员变量

不能调用父类的父类

成员方法的访问特点

this:方法调用者的地址值

super:父类的存储空间

默认(this)就近原则,优先访问本类中的同名方法

使用this或super可以选择调用本类或父类中的方法

构造方法的访问特点

父类的构造方法不会被子类继承

子类中的构造方法默认先访问父类中的无参构造(给父类的数据初始化)

,再执行自己

子类的第一行语句默认为super(),如果需要调用带参构造,则需要在括号中添加参数

如果需要调用本类的其他构造方法,可以使用this(…)

如果调用了this(),就不会再调用super()

方法重写

父类的方法功能不足以满足子类需求,可以对父类方法进行重写

重写格式

私有方法无法重写

需要跟父类方法声明(名称,形参列表)完全一致

子类方法的权限需要大于等于父类方法的权限

并使用@Override重写注解,校验子类重写时是否语法正确

方法重写的本质

当子类继承父类时,如果发生了方法重写,会直接覆盖虚方法表中的同名方法,并将虚方法表传递下去

子类重写父类方法时:

访问权限必须大于等于父类

返回值类型必须小于等于父类

只有能添加到虚方法表中的方法才能被重写

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值