阶段总结:面向对象思想
2.1 面向对象思想
- 面向过程:强调的是过程,这件事怎么做,比喻成执行者
- 面向对象:强调的是对象,这件事找谁做,比喻成指挥者
2.2 类与对象
- 类是对象的抽象、模板
- 对象是类的实例、实体
- 类
- 自定义的类
- API中定义好的类
2.3 标准类
- 私有化成员变量
- 针对每一个私有化成员变量提供一对公共的访问方式(getter和setter方法)
- 提供无参和满参的构造器
- 构造器名字要和类名相同
- 没有返回值类型,而且连void都不能有
2.4 API定义好的类
- 进行导包(这个类在java.lang包下无需导包)
- 通过类的构造器创建对象
- 通过对象中调用成员方法
2.5 static关键字
- 被static关键字修饰的成员变量或者成员方法属于类,不在属于对象,但会每个对象所共享
- static修饰成员变量或者成员方法的调用方式
- 类名.成员变量名
- 类名.成员方法名(实参)
- 构造代码块
- 当定义多个构造器,且每个构造器中有相同的代码,将这些相同的代码抽取出来放到构造代码块中进行简化
- 构造代码块优先于构造器执行
- 静态代码块:
- 只被加载唯一的一次
- 优先于构造代码块和构造器执行
- 单例设计模式
- 设计模式:解决某一类问题的解决思路
- 框架:半成品项目
- 只创建唯一的对象的解决方案
- 设计步骤:
- 私有化构造器
- 创建唯一的对象,且用private static final关键字进行修饰
- 对外提供公共访问方式
2.6 继承
继承的格式
public class 父类 {
//父类的类体
}
public class 子类 extends 父类 {
// 子类的类体
}
继承的特点
- 子类继承父类所有的成员
方法重写
- 方法重写前提条件(缺一不可)
- 子父类继承关系
- 方法名相同
- 返回值类型要相同
- 参数列表要相同
- 方法重写注意事项
- 子类重写后的方法权限大于等于父类的方法
- 子类重写后的方法返回值类型必须是父类方法返回值类型本身或者是其子类
super和this关键字
- 应用场景:只能应用子类的成员方法中或者子类的构造方法中
- super关键字
- 访问父类的成员变量,应用场景在子类的成员方法中
- 访问父类的成员方法,应用场景在子类的成员方法中
- 访问父类的构造方法,应用场景在子类的构造方法中
- this关键字
- 访问本类的成员变量,应用场景在本类的成员方法中
- 访问本类的成员方法,应用场景在本类的成员方法中
- 访问本类的其他构造方法,应用场景在本类的构造方法中
- 注意事项:
- 在构造器中进行使用时,必须放在第一行,不能同时显式使用
2.7 抽象
-
继承中的瑕疵
- 在继承关系中,父类是多个子类共有属性和行为的集合,理想化不能实例化对象,实际中可以被实例化
- 在继承关系中,有时要求子类重写父类的方法,一旦忘记重写代码不会提示,理想化编译报错,实际中没有报错
- 在继承关系中,有时要求子类重写父类的方法,在调用时执行的是子类重写后的方法,父类方法的方法体就显得不是那么重要,理想化父类的方法体不用写提高开发效率,实际中不写编译报错
-
为了解决上述的原因,引入抽象类和抽象方法
-
抽象的注意事项
- 抽象类不可以实例化对象
- 抽象类虽然不可以实例化对象,抽象类中可以定义构造器,用于子类访问父类的构造进行初始化
- 有抽象方法的类一定是抽象类,抽象类不一定有抽象方法
- 子类必须重写父类中所有的抽象方法,除非子类也是抽象类
2.8 final关键字
- 被final关键字修饰的类,不能被继承
- 被final关键字修饰的方法,不能被重写
- 被final关键字修饰的变量,就是一个常量,不能进行二次赋值
- 成员变量赋值方式:
- 直接赋值
- 在所有的构造器中进行赋值
- 局部变量赋值方式:
- 直接赋值
- 先定义,后赋值(后赋值只有唯一的一次)
- 成员变量赋值方式:
2.9 接口
-
成员变量其实是常量,格式:
[public] [static] [final] 数据类型 常量名称 = 数据值;
注意:
常量必须进行赋值,而且一旦赋值不能改变。
常量名称完全大写,用下划线进行分隔。 -
接口中最重要的就是抽象方法,格式:
[public] [abstract] 返回值类型 方法名称(参数列表);
注意:实现类必须覆盖重写接口所有的抽象方法,除非实现类是抽象类。 -
从Java 8开始,接口里允许定义默认方法,格式:
[public] default 返回值类型 方法名称(参数列表) { 方法体 }
注意:默认方法也可以被覆盖重写 -
从Java 8开始,接口里允许定义静态方法,格式:
[public] static 返回值类型 方法名称(参数列表) { 方法体 }
注意:应该通过接口名称进行调用,不能通过实现类对象调用接口静态方法 -
从Java 9开始,接口里允许定义私有方法,格式:
普通私有方法:private 返回值类型 方法名称(参数列表) { 方法体 }
静态私有方法:private static 返回值类型 方法名称(参数列表) { 方法体 }
注意:private的方法只有接口自己才能调用,不能被实现类或别人使用。 -
类和接口的关系
- 类与类的关系:单继承
- 类与接口的关系:多实现
- 接口与接口的关系:多继承
2.10 多态
-
多态的前提条件:
- 要有继承或者实现关系
- 要有方法的重写(没有方法重写代码也不会报错,只不过没有任何意义)
- 父类的引用指向子类对象(父new子)
-
多态访问成员的特点:
- 调用成员方法的特点:先父类中是否存在这个方法,如果没有,编译报错;如果有,执行子类重写后的方法,不能调用子类特有的方法
- 调用其他成员:其实就是调用父类自己的成员
-
在多态形式下,想调用子类特有的方法进行向下转型
-
引用数据类型转换
- 向上转型:子类对象的数据类型转换成父类的数据类型,多态就是向上转型
- 向下转型:将对象的父类的数据类型转换成子类的数据类型,但是可能发生类型转型异常
-
instanceof关键字
- 为了避免类型转换异常
- 格式:对象名 instanceof 数据类型
- 判断这个对象是否属于这个数据类型,如果属于返回true,如果不属于,返回false
2.11 内部类
- 内部类的分类
- 成员内部类
- 局部内部类
- 匿名内部类
匿名内部类
interface 接口名 {
返回值类型 抽象方法名(形参);
}
在main()方法中
接口名 对象名 = new 接口名 () {
实现类的类体(重写后的抽象方法);
};
2.12 枚举类
-
类似于单例设计模式,只创建固定数量对象的一种解决方案
-
在JDK5.0之后可以通过enum关键字创建枚举类进行简化
public enum 枚举类名 { 对象名1(实参),对象名2(实参); private 枚举类名 (形参) { } }

被折叠的 条评论
为什么被折叠?



