java 三大特性:封装、继承和多态

最近项目上线,暂时稍微闲一点,来回顾下java的一些基础。回想下,也是大二上学的java,已经过去两年了,老师教的基本都是那些最基础的,如数据类型、运算符之类的,加上自己又没有好好学,基本算没学,也就后来转向android 的时候,用啥学啥,如集合、多线程和网络通信等等。下面整理下java面向对象的三大特性。

一、封装

封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
一般是把属性私有,对其的访问只提供gettersetter 方法。

二、继承

继承可以理解为一个对象从另一个对象获取方法和属性的过程。常用的两个关键字为:extendsimplements,他们决定了一个对象和另一个对象间是否是IS-A(是一个)的关系。
在Java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类。
注:java的类均是由 java.lang.Object 类继承而来的,上面说的一个父类并不包含Object,它并不需要显示的声明。
extends关键字是用于 类直接的继承而 implements是针对接口的。
类只能是单继承的,但是接口可以同时实现多个,也可以同时使用。如:

1
2
public class A extends B implements  C,D {
}

注:在Java中,类的多重继承是不合法,但接口允许多重继承。

三、多态

多态:同一个行为具有多个不同表现形式或形态的能力。它的必要条件:继承、重写、父类引用指向子类对象。
多态性具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

四、重写(Override)与重载(Overload)

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

方法的重写规则

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

Super:当需要在子类中调用父类的被重写方法时,要使用super关键字。

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

重载的重写规则

  1. 被重载的方法必须改变参数列表;
  2. 被重载的方法可以改变返回类型;
  3. 被重载的方法可以改变访问修饰符;
  4. 被重载的方法可以声明新的或更广的检查异常;
  5. 方法能够在同一个类中或者在一个子类中被重载。

重写与重载之间的区别
| 区别点 | 方法重载 | 方法重写 |
| ——– | :—–: | :—-: |
| 参数列表 | 必须修改 | 不能修改 |
| 返回类型 | 可以修改 | 不能修改 |
| 异常 | 可以修改 | 可减少或删除,不能抛出新的或者更广的异常 |
| 访问 | 可以修改|可以降低访问限制|

五、接口(interface)

接口:是抽象方法的集合。它并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在Java中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

接口的特性:

  1. 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
  2. 接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键子。
  3. 接口中的方法都是公有的。

一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键,与类不同的是他可以多重继承其他接口

1
2
public  interface A  extends InterfaceB,InterfaceC{
}

标记接口:没有任何方法和属性。起作用如下:

  • 建立一个公共的父接口;
  • 向一个类添加数据类型。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器