第五章 习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
答案:
一、单项选择题
1.C 2.D 3.A 4.D 5.C
6.B 7.A 8.B 9.A 10.D 二、简答题
1.
面向对象编程的三大特征:封装、继承和多态。
封装:通过设置访问权限等方式封装了内部实现细节,使用者只需要知道外部接口。
继承:子类可以继承父类的成员,又可以新增自己独有的成员,还可以覆盖父类的成员。
多态:同名方法可以具有不同的行为,Java中有两种意义的多态:重载和重写。
2.
万物皆是对象,对象都有属性和行为。
属性是对象所拥有的状态、数据,是静态的特征;行为是对象所拥有的功能、对数据的操作,是动态的特征,可能会影响到属性。
类封装了一类对象共有的属性和行为,是对具有相同属性和行为的对象的抽象。
类是创建对象的模板,对象是类的具体实例。
3.
(1)定义在类体内、方法外的变量称为成员变量。
定义在方法体内部的变量,以及方法的形式参数,是方法所临时使用的变量,称为局部变量。
(2)成员变量在整个类体中都有效。
而局部变量的有效范围仅限于定义它的方法体内,具体说明如下:①方法的形式参数:在整个方法体内有效;②方法体内独立定义的变量:在方法体中该变量定义之后的语句中有效;③选择、循环等语句块内定义的变量:只在语句块的{ }内有效。
(3)如果定义的成员变量没赋值,则系统为其提供缺省的初始值。
所以成员变量定义后就有了确定的值,就可以使用。
而方法的局部变量必须自行定义而且赋值后才能使用。
(4)类成员变量在程序加载进内存时即开辟空间,实例成员变量在创建对象时开辟空间。
局部变量只在方法调用时开辟空间,方法执行完毕后空间随即释放。
4.
多个方法名字相同,但参数个数或者类型不同,称为方法重载。
方法返回值的类型和参数的名字不参与比较,方法重载是多态的一种体现。
当调用方法时,根据传入的实参个数和类型,可以区分出调用的是哪一个方法。
5.
构造方法与所在类的类名完全相同,构造方法没有返回值类型,也不用void修饰。
构造方法可以重载,一个类中可以定义多个构造方法。
每个类中至少都有一个构造方法,如果未定义构造方法,系统会自动为该类生成一个缺省的没有参数的构造方法,如果类中定义了构造方法,就不再提供其他构造方法。
构造方法用new调用来创建对象,一般在构造方法中初始化成员变量。
构造方法不能用static修饰。
三.编程题
1.
classVecter3:
def__init__(self,x=0,y=0,z=0):
self.X=x
self.Y=y
self.Z=z
def__add__(self,n):
r=Vecter3()
r.X=self.X+n.X
r.Y=self.Y+n.Y
r.Z=self.Z+n.Z
return r
def__sub__(self,n):
r=Vecter3()
r.X=self.X-n.X
r.Y=self.Y-n.Y
r.Z=self.Z-n.Z
return r
def__mul__(self,n):
r=Vecter3()
r.X=self.X*n
r.Y=self.Y*n
r.Z=self.Z*n
return r
def__truediv__(self,n):
r=Vecter3()
r.X=self.X/n
r.Y=self.Y/n
r.Z=self.Z/n
return r
def__floordiv__(self,n):
r=Vecter3()
r.X=self.X//n
r.Y=self.Y//n
r.Z=self.Z//n
return r
def show(self):
print((self.X,self.Y,self.Z)) v1=Vecter3(1,2,3)
v2=Vecter3(4,5,6)
v3=v1+v2
v3.show()
v4=v1-v2
v4.show()
v5=v1*3
v5.show()
v6=v1/2
v6.show()
2.
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Filename: SchoolMember.py
# 面向对象的实例,学校成员类
class SchoolMember:
# 总人数,这个是类的变量
sum_member = 0
# __init__方法在类的对象被创建时执行
def __init__(self, name):
= name
SchoolMember.sum_member += 1
print "学校新加入一个成员:%s" %
print "现在有成员%d人" % SchoolMember.sum_member # 自我介绍
def say_hello(self):
print "大家好,我叫:%s" %
# 老师类继承学校成员类
class Teacher(SchoolMember):
def __init__(self, name, salary):
SchoolMember.__init__(self, name)
self.salary = salary
def say_hello(self):
SchoolMember.say_hello(self)
print "我是老师,我的工资是:%d" % self.salary
# 学生类
class Student(SchoolMember):
def __init__(self, name, mark):
SchoolMember.__init__(self, name)
self.mark = mark
def say_hello(self):
SchoolMember.say_hello(self)
print "我是学生,我的成绩是:%d" % self.mark
t = Teacher("老黄", 3000)
t.say_hello()
s = Student("小河", 77)
s.say_hello()。