版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象编程本章内容编程语言的发展面向对象的设计思想对象和类的概念类之间的关系对象和引用Java类的定义构造函数对象的创建和使用This关键字Static关键字Package和import语句访问控制类的继承方法的重写Final关键字Object类对象转型多态抽象类接口编程语言的发展机器语言汇编语言高级语言面向对象的语言语言朝着人更加能够容易的方向发展面向过程的设计思想和面向对象的设计思想我要去北京面向过程我开车,我挂档,我踩油门,我过河北,我过。。。面向对象我命令车去北京车怎么去不关我的事信息封装在车这个类的内部我不去去了解整个开动的过程面向对象的设计思想从现实世界中客观存在的事物出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式。对象和类的概念对象用计算机语言对问题域中事物的描述,对象通过“属性(attribute)”和方法(method)来分别对应事物所具有的静态属性和动态属性。类是用于同一类的对象的一个抽象概念,类中定义了这一类所具有的静态和动态的属性类可以看成一类对象的模板,对象可以看成该类的一个具体实例类之间的关系之关联关系类之间的关系继承关系Xx是一种xx聚合关系(整体和部分)Xx是xx的一部分实现关系抽象下面的类和对象某航空公司的订票系统Java与面向对象对象是java程序的核心,在java程序中“万事万物皆对象”对象可以看成是静态属性(成员变量)和动态属性(方法)得封装体类是用来创建同一类型的对象的模板,在一个类中定义了该类对象所应具有的成员变量以及方法Jdk提供了很多类供编程人员使用,编程人员也可以定义自己的类成员变量=属性,方法=函数为什么用对象?面向对象更加容易使我们达到这些年苦苦追求的境界Reusable(复用),extensibility(可扩展性)维护,替换更加方便Java类的定义classPerson{//成员变量
privateintid;
privateintage=20;
//方法定义
publicintgetAge(){returnage;}publicvoidsetAge(inti){age=i;}publicintgetId(){returnid;}
成员变量成员变量可以是java语言中任何一种数据类型在定义成员变量时可以对其初始化,如果不对其初始化,java使用默认的对其初始化成员变量的作用范围为整个类体Java面向对象基本概念——引用Java语言除基本类型之外的变量类型都称之为引用类型Java中得对象是通过引用对其操作的Strings;s=newString(“hellojava!”)对象的创建和使用必须使用new关键字创建对象使用对象(引用).成员变量或引用对象的成员变量适用对象(引用).方法(参数列表)来调用对象的方法同一类的每个对象有不同的成员变量存储空间同一类的每个对象共享该类的方法非静态方法是针对每个对象进行调用构造方法(构造函数)使用new+构造方法创建一个新的对象构造函数定义在java类中得一个用来初始化对象的函数构造函数与类同名且没有返回值例如person的构造函数:构造函数当没有指定构造函数时,编译器为类自动添加形如类名(){}的构造函数ClassPoint{ publicintx; publicinty;}
…… Pointp=newPoint();
……系统自动添加构造方法,Point(){};publicclassPerson{ intid; intage=20; Person(inti,intj){ id=i; age=j; }publicstaticvoidmain(Stringard[]){ Persontom=newPerson(1,25); pointp=newpoint();}}classpoint{ intx; inty;}Person.java如果Person()前不小心加上voidpublicclassPerson{ intid; intage=20; voidPerson(inti,intj){ id=i; age=j; }publicstaticvoidmain(Stringard[]){
Persontom=newPerson(1,25); pointp=newpoint();}}classpoint{ intx; inty;}Person.javapublicclassPerson{ intid; intage=20; voidPerson(inti,intj){ id=i; age=j; }publicstaticvoidmain(Stringard[]){
Persontom=newPerson();tom.Person(1,25); pointp=newpoint();}}classpoint{ intx; inty;}不是构造方法了,只是普通的方法对象调用约定俗成的命名规则类名的首字母大写变量名和方法名的首字母小写运用驼峰标识HelloJava练习定义一个“点”(Point)类用来表示三维空间中得点(有三个坐标)。要求如下:可以生成具有特定坐标的点对象提供可以设置三个坐标的方法提供可以计算该“点”据原点距离平方的方法编写程序验证上述三条TestPoint.java方法的重载方法的重载指一个类中可以有相同的名字,但参数不同的多个方法。调用时,会根据不同的参数表选择对应的方法。
voidinfo(){ System.out.println(“aaa”);}voidinfo(Stringt){System.out.println(“ss”);}voidinfo(inti){System.out.println(“123”);}参数个数或者是参数类型不一样定义一个函数,分别int,float,double类型数据两者取大值TestOverload.java如果将文件改为:publicclassTestOverload{ voidmax(inta,intb){ System.out.println(a>b?a:b); } voidmax(inta,floatb){ return(a>b?a:b); } voidmax(doublea,doubleb){ System.out.println(a>b?a:b); } publicstaticvoidmain(Stringagrs[]){ TestOverloadt=newTestOverload(); t.max(1.0,2.0); t.max(1,2); }}如果将文件改为:publicclassTestOverload{ voidmax(inta,intb){ System.out.println(a>b?a:b); } intmax(inta,intb){ return(a>b?a:b); } voidmax(doublea,doubleb){ System.out.println(a>b?a:b); } publicstaticvoidmain(Stringagrs[]){ TestOverloadt=newTestOverload(); t.max(1.0,2.0); t.max(1,2); }}重载?重复定义!构造方法的重载与普通方法一样,构造方法也可以重载例如:Person(){}Person(inti)
{}Person(inti,intj){}this关键字当前对象当前对象指调用类中方法或属性的那个对象Person.javaclassPerson{ privateStringname; privateintage; Person(Stringname,intage){ name=name; age=age; } voidtalk(){ System.out.println("我是"+name",年龄是:"+age); } publicstaticvoidmain(Stringage[]){ Personp=newPerson("John",23); p.talk(); }}name?age?Person.javaclassPerson{ privateStringname; privateintage; Person(Stringname,intage){ =name; this.age=age; } voidtalk(){ System.out.println("我是"+name",年龄是:"+age); } publicstaticvoidmain(Stringage[]){ Personp=newPerson("John",23); p.talk(); }}this关键字在类的方法定义中使用的this关键字代表该方法的对象的引用当必须指出当前使用方法的对象是谁时要用this有时使用this可以处理方法中成员变量和参数重名的情况this可以看做是一个变量,它的值是当前对象的引用testthis.javapublicclasstestthis{ inti=0; testthis(inti){ this.i=i; } testthisincreament(){ i++; returnthis; } voidprint(){ System.out.println("i="+i); } publicstaticvoidmain(Stringagrs[]){ testthist=newtestthis(100); t.increament().increament().print(); }}this调用构造方法在程序中想用某一构造方法调用另一构造方法,可以用this实现this();Person.javaPerson.javapublicclassPerson1{ Stringname; intage; Person1(){ System.out.println("1PersonJava!"); } Person1(Stringname,intage){ this(); =name; this.age=age; System.out.println("2PersonJava!"); } publicstaticvoidmain(Stringargs[]){ newPerson1("John",18); }}匿名对象Person.javapublicclassPerson1{ Stringname; intage; Person1(){ System.out.println("1PersonJava!"); } Person1(Stringname,intage){ =name; this.age=age;this(); System.out.println("2PersonJava!"); } publicstaticvoidmain(Stringargs[]){ newPerson1("John",18); }}匿名对象this()调用构造方法必须放在首行static关键字在程序中如果用static声明变量的话,则此变量称为静态变量。那么什么是静态变量?使用静态变量又有什么好处呢?Person2.javaPerson2.javaclassPerson2{ Stringname; intage; Stringcity; Person2(Stringname,intage,Stringcity){ =name; this.age=age; this.city=city; } voidtalk(){ System.out.println("我是"+name+",年龄"+age+"城市:"+city); } publicstaticvoidmain(Stringargs[]){ Person2p1=newPerson2("张三",18,"China"); Person2p2=newPerson2("李斯",20,"China"); Person2p3=newPerson2("王立",21,"China"); p1.talk(); p2.talk(); p3.talk(); }}如果想把城市都改成“美国”Person22.javaclassPerson22{ Stringname; intage; staticStringcity; Person22(Stringname,intage,Stringcity){ =name; this.age=age; this.city=city; } voidtalk(){ System.out.println("我是"+name+",年龄"+age+"城市:"+city); } publicstaticvoidmain(Stringargs[]){ Person22p1=newPerson22("张三",18,"China"); Person22p2=newPerson22("李斯",20,"China"); Person22p3=newPerson22("王立",21,"China"); System.out.println("修改前的信息:"); p1.talk(); p2.talk(); p3.talk(); p1.city="美国"; System.out.println("修改后的信息:"); p1.talk(); p2.talk(); p3.talk(); }}static声明的属性是所有对象共享的。static关键字用static方式声明的属性,也可以用类名直接访问Person.city=“美国”;静态方法static既可以在声明变量时使用,也可以用其来声明方法,用它声明的方法有时也被称为“类方法”static关键字注意:静态方法中调用静态变量,不可以调用非静态变量非静态方法中既可以调用静态变量也可以调用非静态变量static关键字在类中static声明的成员变量为静态成员变量。它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员静态方法不再是针对于某个对象调用,所以不能访问非静态成员可以通过对象引用或类名(不需要实例化)访问静态成员package和import为了便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,java引入包(package)机制,提供类的多重命名空间。packagePackage语句作为java源文件的第一条语句,,指明该文件中定义的类所在的包,(若缺省该语句,则指定为无名包)。格式为:Packagepkg1[.pkg2[.pkg3…]];Java编译器把包对应于文件系统的目录管理。Package语句中用.来指明包(目录)的层次,例如使用语句Packagecom.sxt则该文件中所有的类位于.\com\sxt目录下Cat.javaDog.javaimportimportcom.sxt(包所在的路径)Dog.javapackage和import总结如果想将一个类放入包中,在这个类源文件第一句话写package必须保证该类的class文件位于正确的目录下该类的源码可能会产生影响删除或转移到另外的目录另外的类想访问的话:写全名引入.具体类名访问位于同一个包中的类不需要引入必须class文件的最上层包得目录位于classpath下执行一个类需要写包的全名类的继承现在假设有一个Person类,里面有name与age两个属性,而另外一个Student类,需要有name、age、school三个属性,如下图所示,从这里可以发现Person中已经存在有name和age两个属性,所以不希望在Student类中再重新声明这两个属性,这个时候就需要考虑是不是可以将Person类中的内容继续保留到Student类中类的继承类的继承Java只支持单继承,不允许多继承一个子类只能有一个基类,一个基类可以派生出多个子类TestPerson1_1.java父类和子类继承图super关键字完成子类调用父类中的内容,也就是调用父类中的属性或方法。Super1_1.java用super调用父类中的构造方法,只能放在程序的第一行。super关键字不仅可以调用父类中的构造方法,也可以调用父类中的属性或方法,Super1_2.javasuper和this比较访问控制Java权限修饰符publicprotectedprivate置于类的成员定义前,用来限定其他对象对该类对象成员的访问权限对于class的权限修饰只可以用public和defaultpublic类可以在任意地方被访问default类只可以被同一个包内部的类访问TestAccess.javaprivateTestPri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甘肃省定西市安定区石泉初级中学2024-2025学年七年级上学期11月月考历史试题(含答案)
- 二零二四年环保治理工程合同2篇
- 2024年BIM技术施工协议标准文本版B版
- 2024年度航空公司机票代理合同标的详细描述3篇
- 2024年全球范围内医疗器械销售代理合同
- 商品混凝土工程进度延误赔偿协议(2024版)2篇
- 2024年专业蔬菜运送协议格式样本版B版
- 2024年度物业服务合同:物业公司与小区业主委员会2篇
- 四年级数学(上)计算题专项练习及答案
- 2024年医疗设备购买与安装合同
- 孕期饮食课件
- 旅游酒店引流方案模板
- 二手空调买卖合同范本
- 食品生产企业落实食品安全主体责任分享交流
- 连锁经营与管理专业职业生涯规划书
- 网络安全基础课件
- 压力容器质量安全风险管控清单(压力容器设计单位)
- 健身指导知识考试题库及答案(500题)
- 1例肺癌终末期患者伴有癌性伤口的个案护理
- 液冷数据中心白皮书 2023:数据中心液冷革命解锁未来的数字冰河
- 幼儿园优质公开课:大班综合《谁知盘中餐》有声动态课件
评论
0/150
提交评论