【Java基础】第07章:随堂复习与企业真题(面向对象-进阶)

第07章:随堂复习与企业真题(面向对象-进阶)

讲师:宋红康
笔记整理:ET浩安

一、随堂复习

1. this关键字的使用

  • this调用的结构:属性、方法;构造器
  • this调用属性或方法是,理解为:当前对象或当前正在创建的对象。
  • this用于区分成员变量与局部变量:this.name是成员变量,name是局部变量。
public void setName(String name){//当属性名和形参名同名时,必须使用this来区分
    this.name = name;
}

public Person(String name){
    this.name = name;
}
  • this(形参列表)的方法,表示调用当前类中其他的重载的构造器。

2. 面向对象的特征二:继承性

  • 继承性的好处
    • 减少了代码的冗余,提高了复用性;
    • 提高了拓展性
    • 为多态的使用,提供了前提
  • Java中继承性的特点
    • 局限性:类的单继承性。后续我们通过类实现接口的方式,解决单继承的局限性。
    • 支持多层继承,一个父类可以声明多个子类。
  • 基础:class A extends B{}
  • 理解:子类就获取了父类声明的全部的属性、方法。可能受封装性的影响,不能直接调用。

3. 方法的重写

  • 面试题:方法的重载与重写的区别?
    • 方法的重载:“两同一不同”
    • 方法的重写:
      • 前提:类的继承关系
      • 子类对父类中同参数方法的覆盖、覆写

4. super关键字的使用

  • super可以调用的结构:属性、方法;构造器
  • super:父类的
  • super调用属性、方法;
  • super调用构造器:
    • 如果子父类中出现了同名的属性,此时使用super.的方式,表明调用的是父类中声明的属性。如果子类的任何一个方法中需要调用父类被重写的方法时,需要使用super.
  • super调用构造器:
    • 在子类的构造器中,首行要么使用了“this(形参列表)”,要么使用了”super(形参列表)“。

5.(熟悉)子类对象实例化的全过程

  • 结果上来说:体现为继承性
  • 过程上来说:子类调用构造器创建对象时,一定回直接或间接地嗲用其父类的构造器,以及父类的父类的构造器,…,智斗调用到Object()的构造器。

6.面相对象的特征三:多态性

  • 广义上的理解:子类对象的多态性、方法的重写;方法的重载(是否算是多态性存在争议)

    狭义上的理解:子类对象的多态性

  • 编译和运行时的不一致体现了多态性

  • 格式:Object obj = new String(“hello”); 父类的引用指向子类的对象。

  • 多态的好处:减少了大量的重载方法的定义;开闭原则

    • 举例:public boolean equals(Object obj)
    • 多态无处不在!讲了抽象类、接口以后,会有更好的理解。(没有多态性,就没有抽象类和接口)

开发中:

使用父类做方法的形参,时多态使用最多的场合。即使增加了新的子类,方法也无需改变,提高了扩展性,符合开闭原则。

【开闭原则OCP】

  • 对扩展开放,对修改关闭
  • 通俗解释:软件系统中的各种组件,如模块(Modules)、类(Classes)以及功能(Functions)等,应该正在不修改现有代码的基础上,引入新功能。
  • 多态的使用:虚拟方法调用。“编译看左边,运行看右边”。属性,不存在多态性。
  • 多态的逆过程:向下转型,使用强转符()。
    • 为了避免出现强转时的ClassCastException,建议()之前使用instanceOf进行判断。

7. Object类的使用

  • 根父类

  • equals()的使用

    • 重写和不重写的区别
    • 面试题:== 和 equals()
  • toString()的使用

    • Object中toString()调用后,返回当前对象所属的类和地址值。
    • 开发中常常重写toString(),用于返回当前对象的属性信息。

8. 项目二:拼电商客户管理系统

  • 编写两个类:Customer、CustomerList类(封装了对数组的增删改查操作)

二、企业真题

2.1 继承性

1.父类哪些成员可以被继承,属性可以被继承吗?可以或者不可以,请举下例子。(北京明**信)

父类的属性、方法可以被继承。构造器可以被子类调用。

(私有的属性也可被继承,但要通过方法来调用)

2.2 重写

1. 什么是Override,与Overload的区别(顺*、软**力、明*数据、阳*数据、中*软)

2. Overload的方法是否可以改变返回值的类型?(新*陆)

重载的方法只跟方法名和参数列表有关系,跟返回值类型没关系

public void method(int i){}

public int method(int j,in k){}

3. 构造器Constructor是否可被override?(鸿*网络、深圳德**技、航***普)

不能!构造器可以重载

4. 为什么要有重载,我随便命名一个别的函数名不行吗?谈谈你是怎么理解的。(腾*)

见名知意

2.3 super关键字

1. super和this的区别(蚂**服)

把两个关键字各自的特点说清楚。

2. this、super关键字分别代表什么?以及它们各自的使用场景和作用。(北京楚*龙)

2.4多态

1.谈谈你对多态的理解

类似问法:

  • Java中实现多态的机制是什么?(国*电网)
  • 什么是多态?(上*银行)
  • Java中的多态是什么意思?(贝*)

2.多态new出来的对象跟不跟不用多态new出来的对象区别在哪?(万*智能)

Person p = new Man();//虚方法调用。屏蔽了子类Man类特有的属性和方法。

Man m = new Man();

3.说说你认为多态在代码中的体现(楚*龙)

无处不在!

2.5 Object类

1.==与equals的区别(拓*思)

类似问法:

> 两个对象A和B,A==B,A.equals(B)有什么区别(华油**普)

2. 重写equals方法要注意什么?(安**网络科技)
  • 明确判断两个对象实体equals()的标准,是否需要所有的属性参与。
  • 对象的属性,又是自定义的类型,此属性也需要重写equals()
3. Java中所有的类的父亲是什么?他都有什么方法?(阿*校招)

相关问题:

Object类有哪些方法?(恒*电子 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值