Java学习日记 2022.6.30


面向对象整理

面向过程和面向对象的区别

面向过程编程思想不考虑封装,继承,多态这些事情,直接定义数据为静态变量,用静态函数操作数据,基于过程编程。面向过程编程,代码不具有可复用性和可扩展性。
面向对象编程思想需要先抽象出实体的结构并用类进行封装,用成员变量表达实体的属性,
用成员方法堆实体属性的操作,提供构造方法构造对象,基于对象编程。
面向对象编程,代码具有可复用性和可扩展性。
举例:实现汽车租赁系统
面向过程的思想
定义多个数组,存储汽车各项数据,直接定义静态函数实现各种业务过程
面向对象的思想:
先抽象出汽车实体的结构,并使用汽车类进行封装。然后创建汽车数组存储汽车实体的数据,再考虑业务功能的实现。

面向对象的三大特征

  1. 封装

  2. 继承

  3. 多态
    第一特性:封装
    用成员变量来描述对象的属性,并用private进行私有化封装,不对外暴露对象的属性防止外部对属性误操作;
    用成员方法来封装对属性的操作,并暴露给外部调用;典型的成员方法就是setter和getter,
    一个是提供给外部进行属性设置,一个是提供给外部读取属性的值。
    第二特性:继承

    1. 继承是Java中类与类之间的一种关系
    2. 继承的关键字是extends
    3. 发生继承的类称为子类,被继承的类称为父类
    4. Java不支持多继承,只支持单继承,但支持多级继承;一个类只能继承一个父类,
      但是一个父类可以有多个子类
    5. 如果一个类没有显示的继承父类,则隐式继承object类
    6. 子类可以继承父类的非私有(非private修饰)成员
    7. 父类的构造方法子类不能继承,但可以使用super()调用
    8. 父类的静态成员与继承无关
    9. 如果父类中有抽象方法,子类必须重写,除非把子类也变为抽象类,让子类的子类去重写(实现)

    第三特性:多态
    先有继承而后有多态,多态的反义词是单态

  4. 指针的多态(数组的多态、参数的多态、返回值的多态归根到底都是指针的多态)
    如果指针是具体的子类类型,则指针是单态指针,只能指向具体的子类多项
    如果指针是抽象的父类对象,则指针是多态指针,可以指向任意的子类对象

  5. 方法的多态(1.基于重载实现 2.基于重写实现)
    重载是编译时多态的体现
    重写是运行时多态的体现

重载和重写的区别

重载和重写都是方法多态的体现
重载overload是编译时多态的体现
1. 重载发生在同一个类中,Java允许方法一个类中的多个方法同名存在,
但必须满足重载的要求
2. 方法名相同,但是方法的参数列表不用(可以是参数个数不同,或者是参数类型不同)
3.静态方法,构造方法,成员方法都可以重载
重写override是运行时多态的体现

  1. 重写发生在子类与父类之间,子类重写父类的方法,其目的是:当使用父类型的指针调用子类方法的时候,可以无需做向下转型。
    2. 子类方法与父类方法同名
    3. 访问修饰符要大于等于父类方法,
    4. 参数个数必须与父类一样,参数类型可以小于等于父类方法的参数类型
    5. 返回值类型可以小于等于父类方法的返回值类型

抽象类和抽象方法的关系

  1. 抽象类和抽象方法都需要使用abstract关键字修饰
  2. 抽象方法必须出现在抽象类中
  3. 抽象类中可以有抽象方法,也可以没有

普通类和抽象类的区别

普通类可以实例化,也可以被继承(实例化就是new 构造方法()创建对象)
抽象类不可以实例化,只能被继承

向上转型和向下转型的区别

向上转型:
1. 将子类对象/指针赋给父类指针的语法称为”向上转型“,隐式的
2. 继承是向上转型的前提,向上转型的目的是为了实现多态的指针
3. 向上转型的副作用:指针无法访问下级对象中的成员(除非发生了重写)
向下转型

  1. 将父类型指针赋给子类型指针的语法称为”向下转型“需要显示的强制转换,通常伴随着instanceof做类型判断,否则可能会出现ClassCastException(类型转换异常)
    2. 指针向下转型为子类型,就可以访问子类中特有成员了(非重写的成员方法)

访问权限修饰符

修饰符当前类同包子类其他包
private私有的可见√不可见×不可见×不可见×
(default)默认的可见√可见√不可见×不可见×
protected受保护的可见√可见√可见√不可见×
public公有的可见√可见√可见√可见√

Private的特点:只有本类可见
default的特点:只有同胞可见
protected的特点:子类可见
public的特点:任何地方都可见

抽象类和接口的区别

  1. 接口也是一种源代码文件
    定义类的关键字是class
    定义接口的关键字是interface
  2. 接口的出现让Java也能够实现多继承, 一个类只能继承一个父类, 但是可以继承多个接口
    子类继承父类, 关键字是extends
    子类实现接口, 关键字是implements
  3. 接口与抽象类进行比较
    相同点:
    1. 都可以作为指针的类型, 实现多态指针
    2. 都不可以实例化
    不同点:
    1. 抽象类用abstract class定义, 接口用interface定义
    2. 抽象类用extends继承, 接口用implements实现
    3. 类只能单继承, 接口可以多实现
  4. 虽然两者都不可以被实例化, 但是抽象类可以有构造方法, 接口不可以有构造方法
  5. 抽象类可以有抽象方法, 也可以有具体方法, 接口只能有抽象方法, 且接口中所有的方法默认是"public abstract" 修饰的
    6. 抽象类可以有成员变量, 接口不能有成员变量, 只能有静态常量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值