封装、继承、多态、(抽象)[抽象可说可不说]
封装
体现形式:方法、属性的私有化、内部类
属性的私有化:将属性用private修饰,然后提供对外的访问(getXXX)和设置(setXXX)的方法,在方法中进行限定,使属性值更加符合的场景要求
优势:提高代码的复用性,保证数据的合法性
权限修饰符
限定变量或者方法的使用范围
|
本类中 |
子类中 |
同包类中 |
其他类中 |
public |
可以 |
可以 |
可以 |
可以 |
protected |
可以 |
可以 |
可以 |
不可以 |
默认 |
可以 |
同包子类可以 |
可以 |
不可以 |
private |
可以 |
不可以 |
不可以 |
不可以 |
private < 默认 < protected < public
继承
发现一些类中的属性和方法是相同的,所以把这些相同的属性和方法提取到一个新的类中,然后利用extends关键字让原来的类和新的类产生联系,这种联系称之为继承。
子类通过继承可以使用父类中的一部分方法和属性。
注意:子类在继承父类的时候继承了父类全部的数据域(属性、方法),但是虽然是继承了父类全部的数据域,但是只有一部分的数据域对子类可见(父类对象中设置为私有的属性和方法,子类拥有却无法访问)
在Java中,支持的是单继承---一个子类只能继承一个父类,一个父类可以有多个子类
多继承与单继承的优劣性比较:
多继承比单继承能更好的提高代码的复用性
单继承相对多继承而言,能明确方法的调用,优点:提高代码的复用性,避免方法的调用产生混乱
super关键字
super在子类中表示父类对象的引用,可以认为是一个虚拟对象,和上面的this有异曲同工之效,都是一个虚拟的对象,只是this代替本类对象来调用本类中的属性和方法,而super则是在子类中调用父类对象
在子类中,通过super来调用父类中的方法和属性
super语句
--- 表示在子类的构造方法中调用父类对应形式的构造方法来创建一个父类对象。
--- 如果没有手动指定super语句,那么在编译的时候会自动添加一个super()
--- 如果父类只提供了含参构造,那么在子类的构造方法中必须手动提供对应形式的super语句
--- super语句必须放在子类构造方法的第一行
多态
编译时多态:方法的重载
运行时多态:向上造型、方法的重写 --- 基于继承
注意:利用向上造型创建的对象,能干什么看的是父类;具体的执行看到是子类