我觉得只要学过OO软件开发的,就会知道OO的三个最主要的特征:

1.封装

将事物的属性(描述该同一事物的特征)和行为(描述该同一事物的操作)进行统一归纳到一个类中,好处是信息隐藏和模块化,提高安全性。

封装的主要作用在于对外隐藏内部实现细节,增强程序的安全性。

其中封装后,大致有4种对外公开的修饰符:private;

                 (默认)default;

                  protected;

                  public。

这四种分别对封装好后的类进行不同程度的操作使用。

2.继承

有些具体的事物可能会有特殊的行为和属性,但是他们都可能属于某一个大事物,这样的事物可以让他继承这个大事物,我们称它为子类,大事物为父类;子类可以继承父类的成员属性和行为,其子类也将拥有父类的所有。


继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力。


继承的特性: 

        1.单一继承。 

        2.子类只能继承父类的非私有成员变量和方法。 

        3.成员变量的隐藏和方法的覆盖。 


继承主要作用:可以提高代码的复用性


3.多态

从继承的定义,我们可以很清楚地知道有很多特殊的行为和属性的子类可能都属于某个大事物。但是这个大事物也有一个公共的行为可能与这些特殊的具体子类共有,只是每个具体的子类的行为可能各尽不同 (我们称之为重写,也是运行时多态)。还有一种可能就是这个子类拥有一个公共行为,但是这个子类可能会根据事实情况来做出不同的行为(我们称之为重载,也是编译时多态)


重载和覆盖是 java 多态性的不同表现方式。 


重载是在一个类中多态性的一种表现,是指在一个类中定义了多个同名的 方法,但是他们有不同的参数个数或有不同的参数类型。 在使用重载时要注意以下几点: 

        1.重载只能通过不同的方法参数来区分。例如不同的参数类型,不同的 参数个数,不同的参数顺序。 

        2.不能通过访问权限、返回类型、抛出的异常进行重载。 


覆盖是指子类函数覆盖父类中的函数。 在覆盖时要注意以下几点: 

        1.覆盖的方法的函数名和参数必须要和被覆盖的方法的函数名和参数完全匹配,才能达到覆盖的效果;

        2.覆盖的方法的返回值必须和被覆盖的方法的返回值类型一致; 

        3.覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者 是其子类; 

        4.被覆盖的方法不能为 private,否则在其子类中只是新定义了一个方法, 并没有对其进行覆盖。 

        5. 子类函数的访问修饰权限要大于等于父类的 (public>protected>default>private) 。

        特别注意:Java 中,子类无法覆盖父类的 static 方法或 private 方法。