封装性(隐藏与封装)
问题:
当创建了类的对象后,如果直接通过“对象.属性”的方式对对应的对象属性赋值的话,可能会出现不满足实际情况的意外
我们考虑不让对象直接作用属性,而通过“对象.方法”的形式,来控制对象对属性的访问。实际情况中,对属性的要求就可以通过
方法来体现。
解决的办法:
(封装与隐藏的思想)1. 将类的属性私有化,2. 提供公共的方法(getter&setter)类实现。
作用:是赋值,拿值
提供公共的方法(getter&setter)方式:
ctrl+alt+s,打开source菜单栏,可以创建Generate Getter&Setter方法
也可以通过该方法创建有参构造器和无参构造器
继承性
- 通过 class S extends P 来实现类的继承
- S是子类 ,P是父类(S继承P)
- 子类继承父类后,父类中声明的属性、方法,子类都可以获取到。
- 明确:当父类中有私有的属性或方法时,子类同样可以获取到,只是由于封装性的设计,使得子类不可以直接调用罢了
- 子类除了通过继承获取父类的结构外,还可以定义自己特有的成分(属性和方法)。
- extends:继承。子类对父类功能的扩展,明确,子类不是父类的子集。(子类的范围可以大于父类的范围)
- java中、类的继承只支持单继承,一个类只能继承一个父类。反之,一个父类可以有多个子类,子父类是相对的概念。
上方的Student空参构造器中的super();会去自动调用父类中的Person空参构造器,并且这里的super:(),可以省略,但他执行步骤不能少。
多态性(可以理解为一种事物的多种形态。)
多态的使用前提:
1. 要有类的继承
2. 要有子类对父类方法的重写
(java中的多态主要是指子类对象的多态性,也就是说父类满足不了子类的需求,需要重写方法,在子类中重写方法,左边会显示绿色△三角形图标)
向上转型:(也就是装箱)
1. 子类的对象赋给父类的引用,父类的引用指向子类的对象
2. 对于多态来说:编译的时候看“左边”,运行的时候看“右边”。
向下转型:(也就是拆箱)
3. 当子类对象赋给父类的引用后,父类的引用只能调用父类的方法,不能调用子类中特有的方法,如果想调用子类中特有的方法,必需把父类的引用向下转型(“拆箱”)。
4. 如果把一个子类向上转型,转成一个父类的对象,然后把对象向下转型,一不小心把对象转成了其它子类的对象;此时编译不会报错,但运行会报错。
判断他是否能向下转型
语法:
if( 对象名 instanceof 子类){
}
抽象性(abstract)
abstract修饰类:
abstract修饰类后,此类不能被实例化(也就是不能创建对象),即不能调用此类里的方法。
抽象类有构造器(凡是类都有构造器)
可以被继承,子类继承抽象类,并重写了所有的抽象方法,则此类是一个"实体类",即可以被实例化。
子类继承抽象类,没有重写所有的抽象方法,意味着此类中任然有父类中的抽象方法,则此类必需声明为抽象的。
abstract修饰方法:
abstract修饰方法后,此方法就是一个抽象方法,抽象方法是没有“方法体”的。(抽象方法只能在抽象类中,而抽象类中可
以没有抽象方法)
抽象方法只能保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写次抽象方法。