Java基础整合——面向对象基础概念

本文详细介绍了Java中的面向对象特性,包括对象的属性和行为、成员变量与局部变量的区别、构造方法的使用以及this和super关键字的含义。此外,文章还探讨了重载与重写的区别,并深入讲解了继承的概念,强调了单继承和构造方法的调用规则。最后,多态作为面向对象的三大特性之一,文中阐述了多态的定义、类型转换以及实现多态的条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java基础整合

万物皆对象
对象是由属性和行为构成。
局部变量和成员变量:
1.作用范围不一样。成员变量可以在当前类的所有方法中访问,局部变量定义在某个方法的内部,只能在方法体中访问;
2.默认值不一样:成员变量在new完对象之后由系统自动初始化,这是由于成员变量在new时会在堆中开辟空间,系统会默认给它初始化。而局部变量在方法体中定义只能手动初始化。
3.生命周期不一样:成员变量在new对象的时候分配空间,也可以说它在堆中开辟了空间,而堆中开辟的空间都是引用类型的,程序员不能直接访问,只能通过栈中地址指向去间接访问堆中空间。引用类型由垃圾回收器进行清理;局部变量在方法被调用时创建,方法执行完毕就立马销毁。
此处注意:成员变量可以和方法中的局部变量同名,如果出现了同名在访问时优先访问方法中定义的局部变量,如果非要访问成员变量则需要在变量名前面加上this的限定。

构造方法:
构造方法编写规则:
1. 方法名必须和当前类同名
2. 方法无返回类型设计,连void都不能写
构造方法非常的重要,它可以帮助我们去创新对象,如果一个类没有声明一个构造方法,那么它就会有一个默认的构造方法,当我们去定义一个有参构造方法时,系统会默认覆盖掉无参构造,并且如果该类有子类会出现如下的情况:在子类对象创建时会先去访问父类对象的构造方法,如果父类的构造方法为有参构造那么就会要求子类写一个父类形参相同的有参构造方法,并在一第一行用super(参数)关键字给出,让父类去初始化。
即便是无参构造器在执行时后台其实也做了一些工作,比如:分配这个对象的空间并按照类型进行属性的而初始化,初始化的值为默认的。如null,\0,0,0.0…

  • this关键字在类中的两种用法:
    1.this表明当前对象,一般情况下可以省略
    2.实现一个类的多个构造方法之间的相互调用语法:this(传参)。
    切记在普通方法中不能直接去调用构造方法,this()只能用在构造方法中,并且只能出现在构造方法的第一句。
  • super关键字
    super关键字表示父类的对象。一般与this差不多,有三种使用方式:-super.属性,来调用父类的属性
    super.方法,来调用父类的方法
    super(),来调用父类的构造方法
    super.属性,一般情况下,是子类有与父类相同的属性,此时,直接调用属性,会调用子类的属性,使用super可以调用父类的属性。

super.方法,一般情况下,是子类重写父类的方法后,只是需要添加一些子类方法的代码,还需要接着使用父类的方法中的代码,此时可以在子类的方法中使用super调用父类的方法。

  • 重载(overload)和重写(override)的区别:
    1、重载可以发生在一个类中,而重写至少需要两个类。
    2、重载要求方法名称相同,但是参数列表不同,其他的不关注。但是重写严格得多,要求除了访问修饰符以外的其他都要相同。
    3、重载实际是两个方法,而且都可以调用。但是重写属于一个方法的覆盖,子类的对象只能调用重写后的方法。
    4、构造方法只能重载,不能重写。

面向对象的三大特性:封装、继承、多态

  1. 封装

    封装有属性的封装和方法的封装
    1.1.属性封装:属性封装将属性设为私有的,提供公共的方法如get、set方法去访问私有属性并给他们赋值或获取值。
    1.2.方法的封装:封装的作用是将需要被外部访问的方法暴露(公有),将不需要外部关注和使用的方法私有。在类的内部,很多方法作用只是为了提供给类中其他方法调用,以将流程用方法来简化,对外而言,是不需要调用的,此时就应该将这些方法私有。

  2. 继承
    一般咱们再写子类和父类我这里提供一个好的方法,我们可以认为父类是一个很抽象的类,子类是一个个具体指明的类。我们把这些子类的共性都可以抽象出来写在父类中,这种好处可以让我们代码更加简洁,复用率高,还具有可扩展性。

  3. java中继承只能单继承(直接父类只有一个)C++可以实现多继承,但是可以多级继承,直接脑补一个树图。这个树图的根是固定的-----Object
    注意:构造方法是不能继承的,因为需要与类名相同,所以不可继承。私有的属性或者行为是不能继承的。

  4. 子类与父类的调用

  5. 子类在调用构造方法时,会自动调用父类的默认的无参构造方法。

  6. 当父类没有无参构造方法时,子类没有办法调用到默认的无参构造方法,此时会报错,需要手动调用有参构造方法。

  7. 无论子类构造方法中有没有调用父类的构造方法,都会调用父类的构造方法。如果使用super()调用父类的构造方法,一定要放到代码的第一行。

  8. 继承过程中的对象创建
    当创建子类对象时,会先创建父类的对象。
    1、分配相应的空间
    2、创建父类的对象
        a、初始化父类的属性
        b、调用父类的构造方法
    3、创建子类对象
        a、初始化子类的属性
        b、调用子类的构造方法

3 多态
    多个不同类型的对象在接受到同一个消息自动表现不同的行为方式

3.1. 对象的类型转换,这是针对引用类型之间

  • 默认类型转换:父类对象指向任何子类对象,称为向上转型
Person p = new Student();
  • 强制类型转换:可以将一个指向子类对象的父类对象,通过强制的方式转成子类对象,称为向下转型。
Person p = new Student(); 
Student ss=(Student)p;

这里画一个图进行解释一波强制类型转换:
在这里插入图片描述
ClassCastException:类型转换异常是在运行时发生错误;为什么会发生错误,在强制转换过程中父类的p对象可能之前不是Student类型对象,是其他子类对象的引用,但是这种情况编译时不会提示给我们,所以在强制类型转换过程中切记要类型匹配一致。

总结多态实现的条件

  1. 要有继承的条件
  2. 父类对象指向子类对象
  3. 子类需要对父类的方法进行重写

    多态指向的过程,在程序执行时,父类对象指向子类对象的时候,会调用父类的构造方法去创建父类的对象,调用父类的方法时,实际上是去调用子类自己的方法执行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值