面向对象特性

一、复用

  • 组合
  • 继承

1. 继承

1.1 初始化
  • 默认情况,子类的构造器会在第一行调用父类的构造器
  • 父类先被初始化,然后是子类
  • 可以使用无参构造器,亦可有参构造器
public class Demo06 {
    public static void main(String[] args) {
        Son son = new Son();
    }
}

class Son extends Father {
    public Son() {
        System.out.println("son is created");
    }
}

class Father {
    public Father() {
        System.out.println("father is created");
    }
}
1.2 清理工作
  • 通过finally方法,来对创建的所有资源进行清理
  • 生成顺序和清理(close) 顺序相反,避免在清理资源时候,资源之间的依赖问题导致的不必要的错误
  • 先清理导出类,然后依次向上到根类

2 组合和继承

# 1. 组合
1.1 has-a
1.2 尽量使用组合


# 2. 继承
2.1 is-a
2.2 要用之前问一个问题:是否需要从导出类向基类向上转型

3. final

# final变量
一个永不改变的编译时变量
1.1 必须用于基础数据类型
1.2 在编译时候就已经定下来,并且可以代入到对应的计算式中
1.3 编译时常量,减轻了运行时负担

一个在运行时候被初始化的值,而你不希望它能被改变
2.1 一般用于引用类型,数组
2.2 引用不可以变,但引用指向的对象其实是可以变的

# 空白final: 
3.1 可以声明一个不赋值的变量
3.2 必须在构造器中进行初始化

# final参数
4.1  表示一个参数在方法中不能被改变

# final方法
5.1 方法不会被覆盖
5.2 private的方法,其实也是final修饰的

# final 类
6.1 不希望被继承的方法
6.2 关闭动态绑定

4. 加载顺序

1. 触发场景
  • 一个类执行new动作时候
  • 访问一个类中的static变量或者static方法时
2. 加载顺序
  • 在类加载被触发的时候,查看当前类是否存在继承关系
  • 基类-子类依次加载
  • 先变量,后构造器

二、多态

  • 接口和实现类,分离了做什么和怎么做
  • 方法参数,尽可能用基类去接受参数

1. 向上转型问题

  • 如果导出类相比基类,添加了新的方法,那么在向上转型的过程中,就会出现 “ 接口窄化 ”问题,但不会比接口更窄

2. 动态绑定

  • 编译期间:实现的是前期绑定
  • 后期绑定:运行时绑定,动态绑定。 在运行时候,根据对象的具体类型来进行判断
  • 动态绑定只针对成员方法,对变量和静态方法无效

3. 构造器

  • 构造器也是static修饰的,不过算是隐式的动态修饰
基类的构造器总是在导出类的构造过程中被调用:
1. 构造器的特殊任务: 检查对象是否被正确的构造。
2. 导出类只能访问它自己的成员,不能访问基类中的成员
3. 只有基类的构造器才具有恰当的知识和权限来对自己的元素初始化
4. 必须令所有的构造器得到调用,否则不可能正确的构造完整对象

三、接口

1. 基本使用

  • 接口的所有的域都是static 和final修饰的,注意用大写
  • 尽量不要在接口中去定义常量,而是用enum或者class
  • 方法默认都是public修饰的(不然会缩小作用域)

2. 原因

  • 解决java的单继承问题,从而可以向上转型为不同的基类
  • 使类不能进行实例化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值