一、面向对象的概念
1.1什么是面向对象
面向对象将构成问题的事物分解成各个对象,这些对象是为了描述某个事物在整个问题解决步骤中的行为。 面向对象以对象为核心,强调事件的角色、主体,在宏观上使用面向对象进行把控,而微观上依然是面向过程,如果说面向过程的思想是执行者,那么面向对象的思想就是指挥者。
1.2面向对象的特性
面变对象具有抽象,封装,继承,多态的特性,更符合程序设计中“高内聚低耦合”的主旨,编写的代码的可维护性,可读性,复用性,可扩展性,远比面向过程思想编写的代码强,但是性能方向比面向过程要低一些。
- 封装:只隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
- 继承:继承就是子类继承父类的特征和行为,使得子类对象具有父类的实例属性和方法或子类重复类继承方法,使得子类具有父类相同的行为。
- 多态:指的是同一个方法调用,由于对象不同可能会有不同的行为。
二、类
2.1类和对象
- 类:对某一类事物的描述,是抽象的、概念上的定义。类由数据成员(也称为属性、域变量、成员变量等)和函数成员(类的行为,也称方法)封装而成,类描述了对象的属性及行为。
- 对象:实际存在的属于该类事物的具体个体,因此也称实例。因一个对象由一组属性和对这组属性操作的方法构成,所以对象是属性和操作的封装体。
2.1.1类的定义
类主要由变量和方法组成
- 变量:修饰符 变量类型 变量名 = [默认值];
- 方法:修饰符 返回值类型 方法名(形参列表){ }
2.1.2对象的创建
类名称 对象名称 = new 类名称( );
2.2构造方法
2.2.1构造方法概念
构造方法也称作构造器,用于给对象进行初始化操作,即为对象成员变量付出是指构造方法的名称必须与类型相同,并且不能定义返回值,不能出现return关键字,构造方法的调用必须通过new关键字调用。
定义格式:修饰符 类名(形参列表){ }
2.2.2构造方法的使用
默认情况下,当系统没有委内提供一个构造方法是只能使用默认的无参构造方法创建对象。
2.2.3构造方法的重载
三、关键字
3.1常用关键字
1:this:表示当前对象
2:super:表示父类的引用
3: static:静态的
4: final:最终的
5:instanceof:表示某个对象是否是本类或本类的子类的对象
6:extends:表示继承
7: abstract:抽象
8: package:包
3.2super与this对比
区别点 | this | super |
---|---|---|
引用 | this代表本类对象的使用 | super代表父类存储空间 |
调用方法 | this.属性,this.方法,this() | super.属性,super.方法(),super() |
调用构造方法 | 调用本类构造方法放在第一条语句 | 调用父类构造方法放在第一条语句 |
查找范围 | 先从本类找,找不到,则查找父类 | 直接查找父类 |
四、Object类
方法签名 | 方法描述 |
---|---|
String toString() | 返回该对象的字符串表示形式 |
boolean equals(Object obj) | 判断两个对象的地址是否相同 |
native int hashCode() | 返回该对象的哈希码值 |
final native Class<?> getClass() | 得到一个对象或者类的结构信息 |
final void wait() | 使当前线程进入等待 |
final native void notify() | 唤醒一个等待的线程 |
五、抽象类
格式:权限修饰符 abstract class 类名{}
权限修饰符 abstract 返回值类型 方法名(参数列表);
注:
- 抽象方法只有方法声明,没有方法体,它必须交给子类重写。子类重写抽象方法,也称作“实现”抽象方法。
- 子类如果也是抽象类,则不一定需要实现父类的抽象方法,而如果不是抽象类,则必须实现父类中所有的抽象方法。
- 抽象方法必须被子类重写,因此抽象方法的访问修饰符不能是private.
- 由于抽象方法没有具体的方法体,无法用一个抽象的对象调用它,因此抽象类不能被实例化。
- 抽象类可以有构造方法,它的构造方法的作用是便于子类创建对象时给抽象类的属性赋值。
六、内部类
6.1成员内部类
定义格式:
class 外部类{
修饰符 class 内部类{
}
}
外部类名.内部类名 变量名 = new 外部类名(实参列表).new 内部类名(实参列表);
6.2静态内部类
class 外部类{
修饰符 static class 内部类{
}
}
外部类名.静态内部类名 变量名 =new外部类名.静态内部类名(形参列表);
6.3局部内部类
class 外部类{
修饰符 返回值类型 方法名(参数列表){
class 内部类{ //其他代码
}
}
}
6.4匿名内部类
new接口() | 父类(){
//其他代码
}