基础第一阶段day09——方法重写习题、继承习题

本文详细讲解了Java中的方法重写和继承概念,通过三道习题进行实例解析。第一题强调了方法重写的要求,包括返回值类型和权限修饰符的匹配。第二题介绍了如何定义动物、狗、猫类并实现eat方法,以及Person类喂养宠物的方法。第三题解释了子类继承父类时,能继承非私有方法和属性的原则。

第一题:在下面程序的第7行补充上下列哪个方法,会导致在编译过程中发生错误?
在这里插入图片描述

A、public float getNum(){return 4.0f;}
B、public void getNum(){}/
C、public void getNum(double d){}
D、public double getNum(float d){ return 4.0f ;}

解析:

A正确,子父类关系,方法名称相同,参数列表相同,方法重写,
并且符合子类的权限修饰符>=父类的权限修饰符,
符合子类的返回值类型<=父类的返回值类型。

B错误,选B,父类的方法类型是float类型,子类的方法类型是void类型,重写报错。

C、D不是方法重写,父类方法是无参的,子类的方法是带参的,因此是子类特有方法,C、D正确。

============================================================================

第二题:根据需求完成代码:
1.定义动物类
属性:
年龄,颜色
行为:
eat(String something)方法(无具体行为,不同动物吃的方式和东西不一样,something表示吃的东西)
生成空参有参构造,set和get方法
2.定义狗类继承动物类
行为:
eat(String something)方法,看家lookHome方法(无参数)
3.定义猫类继承动物类
行为:eat(String something)方法,逮老鼠catchMouse方法(无参数)
4.定义Person类<

<think>我们已有几个面向对象编程的练习题,现在需要扩展更多练习题。根据引用内容,我们可以设计涵盖以下概念的题目:1.类的定义、属性和方法(包括动态属性添加)2.继承和多态(包括抽象类)3.特殊方法(魔术方法)的使用4.封装和访问控制(虽然没有直接提到私有属性,但可以加入)5.静态方法和类方法下面设计几个练习题:###练习题4:图形类及其面积计算设计一个抽象基类`Shape`,包含一个抽象方法`area`。然后创建两个子类`Circle`和`Rectangle`,分别实现`area`方法。要求:-`Circle`类初始化时接收半径(radius),并实现`area`方法(计算圆的面积)。-`Rectangle`类初始化时接收长(length)和宽(width),并实现`area`方法(计算矩形面积)。-使用`abc`模块来定义抽象基类。参考代码结构:```pythonfromabcimportABC,abstractmethodimportmathclassShape(ABC):@abstractmethoddefarea(self):passclassCircle(Shape):def__init__(self,radius):self.radius=radiusdefarea(self):returnmath.pi*self.radius**2classRectangle(Shape):def__init__(self,length,width):self.length=lengthself.width=widthdefarea(self):returnself.length*self.width```###练习题5:自定义字符串类设计一个类`MyString`,重写一些魔术方法,使其具有以下行为:1.初始化时接收一个字符串。2.重写`__str__`方法,当使用`print`时,输出该字符串。3.重写`__add__`方法,使两个`MyString`对象相加时,返回两个字符串连接后的新字符串(返回新的`MyString`对象)。4.重写`__eq__`方法,当两个`MyString`对象内容相同时返回`True`。示例代码:```pythonclassMyString:def__init__(self,s):self.s=sdef__str__(self):returnself.sdef__add__(self,other):returnMyString(self.s+other.s)def__eq__(self,other):returnself.s==other.s#测试s1=MyString("Hello")s2=MyString("World")s3=s1+s2#应该得到"HelloWorld"print(s3)#输出:HelloWorldprint(s1==MyString("Hello"))#输出:True```###练习题6:银行账户类(封装练习)设计一个`BankAccount`类,要求:1.账户有属性:账户名(name)、余额(balance),其中余额为私有属性。2.提供存款(deposit)和取款(withdraw)方法,取款时如果余额不足,打印提示信息。3.提供查看余额的方法(get_balance)。4.使用属性装饰器(property)来设置一个只读的账户余额属性。代码示例:```pythonclassBankAccount:def__init__(self,name,balance=0):self.name=nameself.__balance=balance#私有属性defdeposit(self,amount):ifamount>0:self.__balance+=amountprint(f"存款成功,当前余额为:{self.__balance}")else:print("存款金额必须大于0")defwithdraw(self,amount):ifamount>0:ifamount<=self.__balance:self.__balance-=amountprint(f"取款成功,当前余额为:{self.__balance}")else:print("余额不足")else:print("取款金额必须大于0")@propertydefbalance(self):returnself.__balance#测试account=BankAccount("张三",1000)account.deposit(500)#存款500account.withdraw(2000)#尝试取2000,余额不足print(account.balance)#通过属性访问余额```###练习题7:使用静态方法和类方法设计一个`Date`类,包含:1.初始化方法,接收年、月、日。2.一个实例方法`display`,以“YYYY-MM-DD”格式显示日期。3.一个类方法`from_string`,从字符串“YYYY-MM-DD”创建`Date`对象。4.一个静态方法`is_valid_date`,判断一个字符串是否为有效的日期(格式为“YYYY-MM-DD”,且年月日数值合理)。参考代码:```pythonclassDate:def__init__(self,year,month,day):self.year=yearself.month=monthself.day=daydefdisplay(self):returnf"{self.year}-{self.month:02d}-{self.day:02d}"@classmethoddeffrom_string(cls,date_string):parts=date_string.split('-')iflen(parts)!=3:raiseValueError("日期格式错误")year,month,day=int(parts[0]),int(parts[1]),int(parts[2])#这里可以调用静态方法验证ifnotcls.is_valid_date(year,month,day):raiseValueError("无效的日期")returncls(year,month,day)@staticmethoddefis_valid_date(year,month,day):ifmonth<1ormonth>12:returnFalse#简单判断每月的天数,不考虑闰年days_in_month=[31,28,31,30,31,30,31,31,30,31,30,31]ifday<1orday>days_in_month[month-1]:returnFalsereturnTrue#测试d=Date(2024,5,20)print(d.display())#2024-05-20d2=Date.from_string("2024-05-21")print(d2.display())#2024-05-21print(Date.is_valid_date(2024,13,1))#False```###练习题8:动态属性添加设计一个`Person`类,包含姓名和年龄。然后允许动态添加属性,比如添加一个职业(profession)属性。并编写一个函数,打印对象的所有属性(包括动态添加的)。提示:可以使用`__dict__`来查看对象的属性。代码示例:```pythonclassPerson:def__init__(self,name,age):self.name=nameself.age=age#创建对象p=Person("张三",20)#动态添加属性p.profession="工程师"#打印所有属性print(p.__dict__)#输出:{'name':'张三','age':20,'profession':'工程师'}```这些练习题涵盖了面向对象编程的多个方面,包括抽象类、魔术方法、封装、静态方法和类方法、动态属性等。通过练习可以加深对Python面向对象编程的理解。§§相关问题§§1.如何理解Python中的抽象基类(ABC)?2.在Python中,如何实现类的比较操作(如等于、小于)?3.什么是Python中的属性装饰器(property)?它有什么作用?4.静态方法和类方法有什么区别?5.Python中如何动态地为对象添加属性和方法?</think>以下是更多 Python 面向对象编程的练习题,涵盖继承、多态、封装、魔术方法等核心概念,并包含实际应用场景: ### 练习题 4:几何图形计算 设计一个图形类体系,包含面积计算和比较功能: ```python from abc import ABC, abstractmethod import math class Shape(ABC): @abstractmethod def area(self): pass def __lt__(self, other): return self.area() < other.area() def __str__(self): return f"{self.__class__.__name__} [area={self.area():.2f}]" class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return math.pi * self.radius**2 class Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height # 测试 circle = Circle(5) rect = Rectangle(4, 6) print(circle) # 输出: Circle [area=78.54] print(rect) # 输出: Rectangle [area=24.00] print(circle > rect) # 输出: True (比较面积) ``` ### 练习题 5:电商商品管理系统 实现商品类和购物车功能: ```python class Product: def __init__(self, name, price, stock): self.name = name self.price = price self.stock = stock def __str__(self): return f"{self.name} - ¥{self.price:.2f} (库存: {self.stock})" def apply_discount(self, percent): self.price *= (1 - percent/100) class ShoppingCart: def __init__(self): self.items = {} def add_item(self, product, quantity=1): if product.stock < quantity: print(f"库存不足!{product.name}只剩{product.stock}件") return if product in self.items: self.items[product] += quantity else: self.items[product] = quantity product.stock -= quantity def total_price(self): return sum(product.price * qty for product, qty in self.items.items()) def __str__(self): items_str = "\n".join(f"{product.name} x {qty}" for product, qty in self.items.items()) return f"购物车内容:\n{items_str}\n总计: ¥{self.total_price():.2f}" # 测试 phone = Product("智能手机", 5999, 10) laptop = Product("笔记本电脑", 8999, 5) cart = ShoppingCart() cart.add_item(phone, 2) cart.add_item(laptop, 1) print(cart) ``` ### 练习题 6:学生成绩管理系统 实现学生类与成绩统计功能: ```python class Student: def __init__(self, name, student_id): self.name = name self.student_id = student_id self.__scores = {} # 私有属性 def add_score(self, subject, score): if 0 <= score <= 100: self.__scores[subject] = score else: print("分数必须在0-100之间") def average_score(self): if not self.__scores: return 0 return sum(self.__scores.values()) / len(self.__scores) def __str__(self): subjects = ", ".join(f"{subj}:{score}" for subj, score in self.__scores.items()) return f"学生: {self.name} (ID:{self.student_id})\n科目成绩: {subjects}\n平均分: {self.average_score():.2f}" # 测试 student = Student("张三", "S2023001") student.add_score("数学", 85) student.add_score("英语", 92) student.add_score("编程", 78) print(student) ``` ### 练习题 7:图书馆管理系统 实现图书和借阅功能: ```python class Book: def __init__(self, title, author, isbn): self.title = title self.author = author self.isbn = isbn self.available = True def __str__(self): status = "可借阅" if self.available else "已借出" return f"《{self.title}》- {self.author} [{status}]" class Library: def __init__(self): self.books = [] def add_book(self, book): self.books.append(book) def find_book(self, title): return [book for book in self.books if title.lower() in book.title.lower()] def borrow_book(self, isbn): for book in self.books: if book.isbn == isbn and book.available: book.available = False return book return None # 测试 library = Library() library.add_book(Book("Python编程", "Eric Matthes", "978-7-115-45374-9")) library.add_book(Book("算法导论", "Thomas Cormen", "978-7-111-40701-0")) print("搜索结果:") for book in library.find_book("python"): print(book) # 借阅书籍 borrowed = library.borrow_book("978-7-115-45374-9") if borrowed: print(f"\n已借阅: {borrowed.title}") ``` ### 练习题 8:游戏角色系统 实现游戏角色与技能继承: ```python class GameCharacter: def __init__(self, name, health): self.name = name self.health = health def attack(self): print(f"{self.name}发起普通攻击!") def __str__(self): return f"{self.name} [生命值: {self.health}]" class Warrior(GameCharacter): def __init__(self, name, health, strength): super().__init__(name, health) self.strength = strength def attack(self): print(f"{self.name}使用重剑造成{self.strength}点伤害!") def special_skill(self): print(f"{self.name}发动旋风斩!") class Mage(GameCharacter): def __init__(self, name, health, magic_power): super().__init__(name, health) self.magic_power = magic_power def attack(self): print(f"{self.name}发射魔法飞弹造成{self.magic_power//2}点伤害!") def cast_spell(self): print(f"{self.name}施放火球术造成{self.magic_power}点伤害!") # 测试 warrior = Warrior("亚瑟", 150, 25) mage = Mage("梅林", 80, 40) characters = [warrior, mage] for char in characters: char.attack() # 多态表现 warrior.special_skill() mage.cast_spell() ``` ### 练习题 9:温度转换类 实现温度单位转换和格式化输出: ```python class Temperature: def __init__(self, celsius): self.celsius = celsius @property def fahrenheit(self): return (self.celsius * 9/5) + 32 @fahrenheit.setter def fahrenheit(self, value): self.celsius = (value - 32) * 5/9 def __str__(self): return f"{self.celsius:.1f}°C / {self.fahrenheit:.1f}°F" def __add__(self, other): return Temperature(self.celsius + other.celsius) # 测试 t1 = Temperature(25) print(f"初始温度: {t1}") # 25.0°C / 77.0°F t1.fahrenheit = 100 print(f"设置华氏100度: {t1}") # 37.8°C / 100.0°F t2 = Temperature(10) t3 = t1 + t2 print(f"温度相加: {t3}") # 47.8°C / 118.0°F ``` ### 练习题 10:银行账户继承体系 实现账户类型继承和交易记录: ```python class BankAccount: def __init__(self, account_number, balance=0): self.account_number = account_number self.balance = balance self.transactions = [] def deposit(self, amount): if amount > 0: self.balance += amount self.transactions.append(('存款', amount)) def withdraw(self, amount): if 0 < amount <= self.balance: self.balance -= amount self.transactions.append(('取款', amount)) return amount print("取款失败,余额不足") return 0 def __str__(self): return f"账户: {self.account_number} 余额: ¥{self.balance:.2f}" class SavingsAccount(BankAccount): def __init__(self, account_number, balance=0, interest_rate=1.5): super().__init__(account_number, balance) self.interest_rate = interest_rate def add_interest(self): interest = self.balance * self.interest_rate / 100 self.deposit(interest) return interest # 测试 savings = SavingsAccount("SAV-001", 10000) savings.deposit(5000) savings.withdraw(2000) interest = savings.add_interest() print(savings) print(f"最近交易: {savings.transactions[-3:]}") print(f"添加利息: ¥{interest:.2f}") ``` 这些练习题涵盖了面向对象编程的主要概念: 1. 类与对象的基本使用 2. 继承与多态的应用 3. 封装与访问控制(私有属性) 4. 魔术方法的使用(`__str__`, `__add__`, `__lt__`等) 5. 属性装饰器(@property) 6. 抽象基类(ABC) 7. 类关系设计(组合与继承) 通过完成这些练习,可以全面掌握 Python 面向对象编程的核心技能和设计模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值