2021-12-19【Java程序设计教程】【第三章习题】

1.简述面向对象编程的特性和优势。

封装
封装:把对象的属性私有化,同时提供可以被外界访问这些属性的方法。(如果属性不想被外界访问,那大可不必提供方法给外界访问;但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了)

继承
继承:、特殊类的对象拥有其一般类的全部属性(变量)与服务(方法),称作特殊类(子类)对一般类(父类)的继承。

关于继承,请记住如下 3 点:

  • 子类拥有父类对象中的所有属性和方法(包括私有属性和方法,但这些子类是无法访问的,只是拥有);
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展;
  • 子类可以用自己的方式重新实现(Override,重写覆盖)父类的方法。

多态

多态:类中具有相似功能的不同服务使用一个名称来实现的现象。

对象的多态性是指在一般类(父类)中定义的属性或服务被特殊类(子类)继承之后,可以具有不同的数据类型或表现出不同行为。

Java中有两种方式可以实现多态:

  • 继承(多个子类对父类的同一方法重写)
  • 接口(实现接口并覆盖其中的同一方法)

2.类是由什么组成?类和对象的关系是什么?对象名和对象本身是什么关系?

1.类由类名,属性,方法组成;
2.类的实例化的结果就是对象,而对对象的抽象就是类,类描述了一组有相同特性(属性)和相同行为的对象。
3.对象名表明对象的类型

3.试说明 nullthissuper 这三个变量的作用。

null代表空对象
this代指类自身对象
super代指父类对象

4.简述静态方法、抽象方法和最终方法的作用。

静态方法:编译后系统直接给静态方法分配内存,直到程序运行结束;因此静态方法调用更快

抽象方法:在此类中不必实现他,只是一个虚方法,所有实现可以到子类中去做;子类必须实现父类所有抽象方法。

最终方法:用来完成标准功能的方法,表示该方法无法在子类中被覆盖。

7.7.研究下面这段代码:

class super{
    public float getNum(){return 3.0f;}
}
public class Sub extends Super{
    
}

将下列哪个方法写入上述代码第五行,会出现编译错误?(B

A.public float getNum(){return 4.0f;}
//属于覆盖

B.public void getNum(){}
//'com.company.Sub' 中的 'getNum()' 与 'com.company.Super' 中的 'getNum()' 冲突; 尝试使用不兼容的返回类型
//覆盖要求返回值与父类一致

C.public void getNum(double d){}
//属于重载

D.public double getNum(flloat d){return 4.0f;}
//属于重载

覆盖方法的调用原则:

(1)父类被覆盖的方法的声明必须要和子类的同名方法的声明完全匹配,才能达到覆盖的效果。

(2)覆盖的方法的返回值必须和被覆盖的方法的返回值一致。

(3)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖,因为修饰符为private的方法,子类不能从父类继承,所以覆盖也不存在了。

(4)当Java程序运行时,系统根据调用该方法的对象,来决定实际调用的是子类还是父类的方法。对于子类的一个对象,如果该子类重写了父类的方法,则运行时系统调用子类的方法;如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。

(5)重写后的方法不能比被重写的方法有更严格的访问权限(可以相同)。

(6)重写后的方法不能比重写的方法产生更多的例外,即抛出更多的异常。

方法重载要注意的几点:

(1)Java的方法重载要求同名的方法必须有不同的参数表,仅有返回类型不同是不足以区分两个重载的方法。

(2)参数类型的区分度一定要够,即参数类型、个数、顺序至少有一项不相同。例如不能是同一简单类型的参数,如int与long

(3)方法的修饰符可以不相同

(4)一个类的多个构造函数之间还可以相互调用,这可以通过关键字this来实现。需要注意的是,这个调用语句必须是整个构造函数的第一个可执行语句。

在一个类中不允许定义两个方法名相同,并且参数签名也完全相同的方法。因为假如存在这样的两个方法,Java虚拟机在运行时就无法决定到底执行哪个方法。

覆盖与重载的区别如下:

(1)方法的覆盖是子类和父类之间的关系,而重载是同一类内部多个方法间的关系
(2)方法的覆盖一般是两个方法间的覆盖,而重载时可能有多个重载方法;
因为假如
(3)覆盖的方法有相同的方法名和形参表,而重载的方法只能有相同的方法名,不能
有相同的形参表:
(4)覆盖时区分方法的是根据调用它的对象,而重载是根据形参来决定调用的是哪个方法;
(5)用final修饰的方法是不能被子类覆盖的,只能被重载

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eternity_GQM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值