一.封装
封装是面向对象三大特征之一,它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。封装实际上有两个方面的含义:把该隐藏的(对象的属性和实现细节)隐藏起来,把该暴露的(方法)暴露出来。这两个方面都需要通过使用Java提供的访问控制符来实现。
使用访问控制符
private访问控制级别:如果一个类里的成员(包括属性和方法)使用private访问控制符来修饰,则这个成员只能在该类的内部被访问。很显然,这个访问控制符用于修饰属性最合适,使用它来修饰属性就可以把属性隐藏在类的内部。
default访问控制级别:如果一个类里的成员(包括属性和方法)或者一个顶级类不使用任何访问控制符修饰,我们就称它是默认访问控制,default访问控制的成员或顶级类可以被相同包下其他类访问。
protected访问控制权限(子类访问权限):如果一个成员(包括属性和方法)使用protected访问控制符修饰,那么这个成员既可以被同一个包中其他类访问,也可以被不同包中的子类访问。
public访问控制权限(公共访问权限):public是一个最松的访问控制级别,如果一个类的成员(包括属性和方法)或者一个顶级类使用了一个public访问修饰符,这个成员或者顶级类就可以被所有类访问,不管访问类和被访问类是不是处于同一个包中,是否具有父子继承关系。
二.继承
继承是面向对象三大特征之一,是面向对象实现软件复用的重要手段,当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法。Java的继承具有单继承的特点,每个子类只有一个直接父类。
重写父类的方法
1.方法的重写要遵循“两同两小一大”规则:
“两同”即方法名相同、形参列表相同,“两小”指子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常应比父类方法声明抛出的异常类更小或相等。“一大”指的是子类方法的访问权限应比父类方法更大或相等,尤其需要指出的是,覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。
当子类覆盖了父类的方法后,子类的对象将无法访问父类中被覆盖的方法,但可以在子类方法中调用父类中被覆盖的方法。
(1)如果要在子类中调用父类中被覆盖的实例方法,可以使用super。
(2)如果要在子类中调用父类中被覆盖的类方法,使用父类类名来调用。
如果父类方法具有private访问权限,则该方法对其子类是隐藏的,因此其子类无法访问该方法,也就无法重写该方法。
2.方法的重写与方法的重载不同,方法的重载要遵循“两同,一个不同”规则:
“两同”即同一个类中、方法名相同,“一个不同”即形参列表不同。
Java允许同一个类里定义多个同名的方法,只要形参列表不同即可。 如果同一个类中包含了两个或两个以上的方法名相同,但参数列表不同,则被称为方法重载。至于方法的其他部分,如方法返回值类型、修饰符等,与方法重载没有任何关系。
三.多态
Java引用变量有两个类型:一个是编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时的类型决定,运行时的类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就会出现所谓的多态。
多态指的是子类对象可以直接赋给父类变量,但运行时依然表现子类的行为特征,这意味着同一个类别的对象在运行时可能表现出不同的行为特征。只有子类重写了父类的方法。使用父类类型创建的引用变量,所赋的值为子类类型创建的实例(对象)时,用这个新建的对象调用子类重写父类的方法才会出现多态。
也就是说多态有3个条件:1:继承 2:重写(子类重写父类继承的方法) 3:父类引用指向子类对象