3.31串讲 面向对象
什么是对象、类:
- 类:是对具有相同特性事物的抽象;在java中Class就是类,类是有属性(成员变量)和方法
- 对象:对象是类的具体实例
类是一个抽象的概念,把组成的抽象叫属性,把行为的抽象叫方法
面向对象,面向过程
- 面向对象:一切皆对象,注重结果
- 面向过程:一切皆方法,注重过程
面向对象特征
- 封装:
- 属性私有化,提供公开的getter、setter方法,
- 安全性,可以不用在意具体实现细节
- 继承:
- extends
- java中是单继承,但可以多层继承
- 一个类只能继承一个类
- 所有类都有父类,如果没有看到 extends,它的父类就是 Object
- 代码复用
- 多态:
- 同一个事物在不同环境下表现出不同的形态
- 行为(方法)的多态:
- Override 重写/覆盖
- Overload 重载
- 对象的多态:
- 父类 f = new 子类;
- 父接口 f = new 实现类;
- 条件:继承或实现的关系,从左到右:has a;从右到左:is a 关系
- 抽象:
- abstract
- 不容易出错
接口&抽象类
- 抽象类:特殊的类,类名前用abstract 修饰
- 抽象类不一定有抽象方法,有抽象方法的类必须是抽象类
- 抽象类不能实例化,必须通过子类继承后来new 对象
- 接口:特殊的抽象类,用 interface 修饰
- 接口中的方法都是 public abstract 修饰的,所以默认省略这两个关键字
- 接口中的变量都是常量
- 类和接口之间可以多实现,接口与接口之间可以多继承
- 在有继承和实现的情况下,先继承后实现
构造方法/构造器
- 特点:与类名一致,没有返回值类型,也不写void
- 作用:创建对象,给属性赋值,初始化
- 一个类中可以有多个构造方法,如果不写,系统默认提供一个无参构造方法,如果写了构造方法,系统不在默认提供,写了有参构造方法,建议加上无参构造,因为继承时子类会默认调用父类的无参构造方法
- 构造方法之间相互调用,使用 this(xxx),并且必须放在构造方法的第一行,只能调用一次
关键字
- this:当前对象
- this.XXX 调用本类的属性
- this(XXX) 调用本类的其他构造方法,,必须放在构造方法第一行
- super:
- super.XX调用父类的属性
- super(XXX)调用父类的构造方法,,必须放在构造方法第一行
- static
- 静态的
- 静态方法、静态内部类、静态变量、静态代码块
- 属于类的成员
- 一个类只有一份,所有对象共享
- final
- 最后的,最终的
- 修饰变量:赋值后不能被修改
- 修饰方法:方法不能被重写
- 修饰类:类不能被继承
- instanecof 判断对象类型转换
修饰符
访问修饰符 | 本类 | 同包 | 派生类 | 其他 |
---|---|---|---|---|
private | √ | × | × | × |
默认 | √ | √ | × | × |
protected | √ | √ | √ | × |
public | √ | √ | √ | √ |
内部类
- 匿名内部类
- 成员内部类
- 局部内部类
- 静态内部类
枚举 Enum
- 用来定义一组常量,对象数目固定,不可随便造
- 季节、月份、星期
重载和重写
- 重载:
- 发生在同一个类中
- 方法同名不同参
- 重写:
- 发生在父子类中
- 子类方法与父类方法关系:两同两小一大
- 方法名相同、参数列表相同
- 返回值类型小于等于父类、抛出异常小于等于父类
- 访问修饰符大于大于父类
父子类方法调用关系
父子类之间的方法有以下关系:
- 父类中有,子类中没有:调用父类的
- 父类中有,子类中也有:调用子类的重写后的方法
- 父类中没有,子类中有:子类特有方法需要强转后调用