Java 一周学习总结(三)

Java 学习总结

学习Java的第三周,本周主要的学习内容为面向对象
点击查看思维导图

面向对象

程序员眼中,世界是由无数个对象组成的。一切客观存在的事物都是对象,万物皆对象。

  • 现实与程序
    1. 现实中的对象,来自于模板,通过模板造出来的实体,即是现实的对象。
    2. 程序中的对象,来自于模板(“”),通过类造出来的实体,即是程序中的对象。

  • 类与对象的关系
    1. 类:定义了对象应具有的特征和行为,类是对象的模板
    2. 对象:拥有多个特征和行为的实体,对象是类的实例

  • 任何对象,一定有自己的特征和行为。
    4. 特征:称为属性,一般为名词,代表对象都有什么。
    5. 行为:称为方法,一般为动词,代表对象能做什么。

  • 属性:通过变量表示,又称实例变量、成员变量。位于类的内部,方法的外部。实例变量存在默认值,可以不赋值直接使用。

  • 局部变量与实例变量的区别

局部变量实例变量
方法内部类的内部,方法外部
无默认值,先赋值再使用有默认值
有效范围从定义行到所在结构结束本类内部都有效

实例变量可以与局部变量重名,此时局部变量优先。

  • 方法:通过函数表示,又称实例方法、成员方法。
    • 方法的声明:
      修饰符 返回值类型 方法名 (形参列表)
    • 方法的实现:
      {}

public void eat {}

  • 方法重载(Overload):在一个类中定义多个相同名称的方法。
    要求:
    1. 方法名称相同
    2. 参数列表不同
    3. 与访问修饰符、返回值无关
    好处:屏蔽用户的使用差异,方便。

  • 构造方法(Constructor):类中的特殊方法,主要用于创建对象。
    特点:
    1. 名称与类名完全相同(包括大小写)。
    2. 没有返回值类型。
    3. 创建对象时(new对象时),触发构造方法的调用,不可通过句点的形式手工调用。

  • 注意:如果没有在类中显示定义过构造方法,则编译器默认提供无参构造方法。如果已经手动添加过有参构造方法,则无参构造方法不再默认提供,可结合需求自行添加。

  • this关键字
    this代表“当前实例”,即是模板中的当前对象,模板服务与哪个对象,this就指向哪个对象。

    • this第一种用法:调用本类中的实例属性、实例方法。例如:this.name、this.run() ,
    • this第二种用法:调用本类中的其他构造方法。例如:this()、this(实参)。注意:此用法必须在构造方法的首行。
    • 默认来讲,实例属性和方法前的this.隐式存在

面向对象三大特性

1. 封装
  • 概念:尽可能隐藏对象的内部实现细节,控制对象的修改及访问的权限。
  • private的访问修饰符,修饰属性,达到本类可见的效果。
  • get/set方法是外界访问私有属性的唯一通道,方法内部可对数据进行过滤。(可在set方法中添加过滤条件)
  • 提供公共访问方法,以保证数据可以正常录入。
2. 继承

程序中的继承,是类与类之间特征和行为的一种赠与或获得。

  • 根据程序需要使用到的多个具体类,进行共性的提取,进而定义父类。功能越精细,重合点越多的,越接近直接父类。
    在一组相同或类似的类中,抽取出共性的特征和行为,定义在父类中,实现重用。
    产生继承关系之后,子类可以使用父类中的属性和方法,也可定义子类独有的属性和方法。
    完整的子类 = 父类共性 + 子类独有
    Java为单继承,一个类只能有一个直接父类,但可以多级继承,属性和方法逐级叠加。
    好处:既提高代码的复用性,又提高代码的可扩展性。

    不可继承
    1. 父类的构造方法,子类不可继承。
    2. 父类中由private修饰的成员,不可继承(不可见)。
    3. 父类中由default修饰的成员,子类不在同包时,不可继承(不可见)。

  • 方法的覆盖/重写(Override)
    1. 当父类提供的方法无法满足子类需求时,可以在子类中定义和父类相同的方法进行覆盖。
    2. 要求:方法名、参数表、返回值,必须与父类完全相同,访问修饰符应与父类相同或比父类更宽泛。
    3. 执行机制:子类覆盖父类方法后,优先执行子类覆盖后的方法版本。

  • super关键字:

    • 第一种用法:在子类中,可以通过" super. "的形式访问父类的属性和方法,可解决一定的属性遮蔽、方法覆盖后的父类成员调用问题。
    • 第二种用法:super() 表示在子类构造方法的首行,调用父类的无参构造方法。
  • 继承关系下的对象创建

    • 继承关系下,构建子类对象时,会先构建父类对象。
    • 由“父类共性”+ “子类独有”组合成一个完整的子类对象。
    • 创建流程:
    1. 构建父类对象
    2. 初始化自身属性
    3. 执行自身构造方法中的逻辑代码
  • 注意:

  1. 如果子类构造方法中,没有显示定义super()或super(实参),则默认提供super()。
  2. 同一个子类构造方法中,super()、this()不可同时存在。
3. 多态:
  • 概念:父类引用指向子类对象,从而产生多种形态。
  • 父类引用仅可调用父类中所声明的属性和方法,不可调用子类独有的属性和方法。
  • 多态的作用: 屏蔽子类间的差异,灵活、耦合度低。

  • 多态两种应用场景:
    1. 场景一:使用父类作为方法形参,实现多态。
    调用方法时,可传递的实参类型包括:本类型对象+其所有的子类对象。
    2. 场景二:使用父类作为方法返回值,实现多态。
    调用方法后,可得到的结果类型包括:本类型对象+其所有的子类对象。

  • 装箱和拆箱:
    1. 装箱:父类引用中保存真实子类对象,称为向上转型。
    2. 拆箱:将父类应用中的真实子类对象,强转回子类本身类型,称为向下转型。
    3. 注意:向下转型时,如果父类引用中的子类对象的类型与目标类型不匹配,则会发生类型转换异常。java.lang.ClassCastException,故向下转型前,需要判断引用中的对象的真实类型,使用instanceof关键字。

  • instanceof关键字:
    语法:父类引用 instanceof 类型(返回boolean类型的结果)

随着第三周的学习,内容越来越深入,难度也开始逐渐提升。各种语法的使用方式,各种声明、调用,代码间隐含的规则,接踵而来。想要理解它们并不困难,即使自己理解不了,也还可以向他人请教,总会懂的。但是,看懂和会用是两个概念,是两个差距很大的概念。想要熟练使用,只有靠反复的练习,十遍,百遍。成功没有捷径,唯有勤奋刻苦。

书山有路勤为径,学海无涯苦作舟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值