首页 文章 精选 留言 我的

精选列表

搜索[项目对象模型],共10000篇文章
优秀的个人博客,低调大师

Java 面向对象 之 方法的覆盖

http://www.verejava.com/?id=16992799039246 /** 知识点:方法的复写, 重写(override) 1. 覆盖就是 在继承的关系中, 子类复写了父类的方法, 这个时候子类的实例 会调用子类复写的方法,而不会调用父类的该方法 2. 回顾一下 重载(overload) */ public class Override { public static void main(String[] args) { //实例化 一个中国 学生 ChineseStudent s = new ChineseStudent(); s.say(); //实例化一个美国学生 AmericaStudent as = new AmericaStudent(); as.say(); } } class Person { public void say() { System.out.println("说话"); } } class Student extends Person { } class ChineseStudent extends Student { public void say() { System.out.println("说中文"); } } class AmericaStudent extends Student { public void say() { System.out.println("说英文"); } } http://www.verejava.com/?id=16992799039246

优秀的个人博客,低调大师

Java 面向对象 之 继承的限制

http://www.verejava.com/?id=16992794557845 /** 3. 继承的限制 java 不运行多继承, 也就是只能继承一个类, 但是其父类可以再继承一个类 继承具有传递性 */ public class Inheritence2 { public static void main(String[] args) { //生出一个儿子 Child son = new Child(); } } class ChinesePeople { public ChinesePeople() { System.out.println("实例化中国人种"); } } class Father extends ChinesePeople { public Father() { System.out.println("实例化父亲"); } } class AmericaPeople { public AmericaPeople() { System.out.println("实例化一个美国人种"); } } class Mother extends AmericaPeople { public Mother() { System.out.println("实例化妈妈"); } } class Child extends Mother { public Child() { System.out.println("实例化儿子"); } } http://www.verejava.com/?id=16992794557845

优秀的个人博客,低调大师

面向对象--小实例---DVD出借管理

usr/bin/python --coding:utf-8-- class DVD: def __init__(self,name,price,status): self.name = name self.price = price self.status = status if name == "__main__": # 0 未借出 1 借出 a = DVD("盗梦空间",10,1) b = DVD("星际穿越",20,0) c = DVD("黑客帝国",30,1) dvds = {a.name:a,b.name:b,c.name:c} print(dvds) while True: print("——————————DVD管理系统————————————") print("1,查询所有DVD") print("2,增加DVD") print("3,借出DVD") print('4,归还DVD') print("5,退出") print("----------------------------------------------------------") i = int(input("请选择您要进行的操作:")) if i == 5: break elif i == 1: print("名称".center(20) + "价格".center(20) + "状态".center(10)) for key in dvds.keys(): print(dvds.get(key).status) if dvds.get(key).status == 0: print(key.center(18) + str(dvds.get(key).price).center(21) + "未借出".center(11)) else: print(key.center(18) + str(dvds.get(key).price).center(21) + "已借出".center(11)) elif i == 2: name = input("\t请输入要添加的DVD的名称:") while name in dvds.keys(): name = input("\t该DVD已经存在,请重新输入:") else: price = input("\t请输入要添加的DVD的价格:") new_dvd = DVD(name,price,0) dvds[name] = new_dvd print("添加成功!!!") elif i == 3: while True: name = input("\t请输入要借出的DVD名称:") if name not in dvds.keys(): print('\t\t没有该DVD,请重新输入!') elif dvds.get(name).status == 1: print('\t\t已经借出,请重新输入!') else: print("{}借出成功!!".format(name)) dvds.get(name).status = 1 break elif i == 4: while True: name = input("\t请输入要归还的DVD名称:") if name not in dvds.keys(): print("\t\t不存在,请重新输入!") elif dvds.get(name).status == 0: print("\t\t该DVD没有被借出,请新输入:") else: days = int(input("\t请输入借出天数:")) print("请扫一扫:",int(dvds.get(name).price) * days,"元") dvds.get(name).status = 0 print("归还成功!!") break

优秀的个人博客,低调大师

面向对象高级编程:使用@property

在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑。为了限制score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_score()来获取成绩,这样,在set_score()方法里,就可以检查参数: class Student(object): def get_score(self): return self._score def set_score(self, value): if not isinstance(value, int): raise ValueError('score must be an integer!') if value < 0 or value > 100: raise ValueError('score must between 0 ~ 100!') self._score = value 现在,对任意的Student实例进行操作,就不能随心所欲地设置score了: >>> s = Student() >>> s.set_score(60) # ok! >>> s.get_score() 60 >>> s.set_score(9999) Traceback (most recent call last): ... ValueError: score must between 0 ~ 100! 但是,上面的调用方法又略显复杂,没有直接用属性这么直接简单。 有没有既能检查参数,又可以用类似属性这样简单的方式来访问类的变量呢?对于追求完美的Python程序员来说,这是必须要做到的! 还记得装饰器(decorator)可以给函数动态加上功能吗?对于类的方法,装饰器一样起作用。Python内置的@property装饰器就是负责把一个方法变成属性调用的: class Student(object): @property def score(self): return self._score @score.setter def score(self, value): if not isinstance(value, int): raise ValueError('score must be an integer!') if value < 0 or value > 100: raise ValueError('score must between 0 ~ 100!') self._score = value @property的实现比较复杂,我们先考察如何使用。把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作: >>> s = Student() >>> s.score = 60 # OK,实际转化为s.set_score(60) >>> s.score # OK,实际转化为s.get_score() 60 >>> s.score = 9999 Traceback (most recent call last): ... ValueError: score must between 0 ~ 100! 注意到这个神奇的@property,我们在对实例属性操作的时候,就知道该属性很可能不是直接暴露的,而是通过getter和setter方法来实现的。 还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性: class Student(object): @property def birth(self): return self._birth @birth.setter def birth(self, value): self._birth = value @property def age(self): return 2015 - self._birth 上面的birth是可读写属性,而age就是一个只读属性,因为age可以根据birth和当前时间计算出来。 小结 @property广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性。 转载。原文:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143186781871161bc8d6497004764b398401a401d4cce000

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册