【java基础】一、面向对象的三大特性:封装、继承、多态

190 阅读3分钟

封装:将对象的实现细节隐藏起来,然后通过一些公用的方法来暴露该对象的功能;

继承:面向对象实现软件复用的重要手段,当子类继承父类后,子类作为一种特殊的父类对象,将直接获得父类的属性和方法;

多态:子类的对象可以直接赋值给父类的变量,但运行时依然表现出子类的行为特征,这意味着同一个类型的对象在执行同一个方法时,可能表现出多种行为特性。实现多态的两种方式:重写重载

Java引用变量有两种类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时的类型由实际赋值给该变量的对象决定,如果编译时类型和运行时类型不一致,就会出现多态

例子

A a = new B();

类B继承自类A,引用类型 a 的编译时类型为 A,运行时类型为 B,两者不一致,出现多态

重写: 重写是子类对父类中允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变,即外壳不变,核心重写!访问权限可以进行修改,重写的好处在于子类可以根据需要,定义特定于自己的行为,即子类能够根据需要重新实现父类的方法。

重写规则:

• 参数列表必须完全与被重写方法的相同;
• 返回类型必须完全与被重写方法的返回类型相同;
• 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
• 父类的成员方法只能被它的子类重写。
• 声明为final的方法不能被重写。
• 声明为private的方法不能被重写,所有的private方法默认是final的,即不可继承的
• 声明为static的方法不能被重写(类方法),但是能够被再次声明
• 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为privatefinal的方法。
• 子类和父类不在同一个包中,那么子类只能够重写父类的声明为publicprotected的非final方法。
• 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
• 构造方法不能被重写。private final static 构造方法不能重写
• 如果不能继承一个方法(private),则不能重写这个方法。

总结:三同一小一大:返回类型相同、方法名称相同、参数列表相同,异常小于等于父类方法异常,访问权限大于等于父类方法访问权限。

重载: 重载是指在一个类里面,方法名字相同,方法参数不同,返回类型可以相同也可以不同,每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

重载规则:

• 被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);
• 被重载的方法可以改变返回类型;
• 被重载的方法可以改变访问修饰符;
• 被重载的方法可以声明新的或更广的检查异常;
• 方法能够在同一个类中或者在一个子类中被重载。
• 无法以返回值类型作为重载函数的区分标准。