封装
对象代表什么,就需要封装对应的数据,并提供数据对应的行为
继承
通过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重写注解,校验子类重写时是否语法正确
方法重写的本质
当子类继承父类时,如果发生了方法重写,会直接覆盖虚方法表中的同名方法,并将虚方法表传递下去
子类重写父类方法时:
访问权限必须大于等于父类
返回值类型必须小于等于父类
只有能添加到虚方法表中的方法才能被重写