一、什么叫面向对象
万物皆对象(待更正)
二、面向对象三大特征
抽象:把一类对象共同特征进行抽取构造类的过程,包括两种抽象:第一种是数据抽象,也就是对象的属性。第二种是过程抽象,也就是对象的行为
封装:可以隐藏实现细节,使代码模块化。
继承:可以拓展已存在的代码模块(类),实现代码重用。
多态:类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性的正确调用,实现接口重用。
Java中多态的机制:重载与重写
重载:名称相同,参数可辨,在参数可辨的情况下不关心返回值(对访问限定符无要求),编译期即可确定调用哪个方法
重写:(发生于父子类的继承关系中)函数名称、参数列表完全相同,
子类重写方法返回值必须等于父类返回值(或者其子类)
访问修饰符的限制一定要大于等于被重写方法的访问修饰符——里氏替换原则,如果访问变小导致无法访问,则不符合里氏替换
重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
不能重写标志为final,static的方法
三、接口和抽象类的区别
从设计层面来说,抽象是对类的抽象,是一种模板设计, 接口是行为的抽象,是一种行为的规范
接口的其他常见用法可以分为:
单方法接口(也即是JDK8中的函数式接口)、声明式接口(serializable接口)、常量接口(只保留常量,请勿使用)
Java的接口应当仅仅作为类型声明,想管理常量,请使用常量类!
也就是Java与模式中提到的,代码的逻辑是从下到上进行公共提取向上流动,而数据则是反方向,也就是抽象类的数据越少越好!
四、重要关键字
1.final
final修饰变量——基本类型变量无法被改变,引用类型变量引用无法指向其它对象(引用变量不能变,指向的对象可以变)
这里说的初始化是指两个地方的初始化:要么是定义时初始化,要么通过构造函数初始化,两者二选一
public static final int i = 1; public static final StringBuffer sb = new StringBuffer("hello"); public static void main(String[] args) { // i = i + 1;基本类型,无法重新赋值 sb.append("world");// 引用所指向对象内容可以改变 //sb = new StringBuffer("world");无法重新指向新的对象 }
final修饰方法——无法被重写
final修饰类——无法被继承
更多final关键字相关的解析,参见:http://www.cnblogs.com/dolphin0520/p/3736238.html