




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四讲 类、对象 1.面向对象概述 2.类与类成员(变量) 3.对象及其创建与应用 4.类的成员方法 1.面向对象概述(三大特性) 封装性:是指将描述某种实体的数据和基于这些数 据的操作集合到一起,形成一个封装体。封装体内数 据受到保护,通过与外界的接口实现信息交流。 继承性:继承反映了两个类之间的一般性和特殊性 的关系。当一个类拥有另一个类的所有数据和方法时 ,称这个类继承了另一个类,这两个类具有继承关系 。继承分为单重继承和多重继承。JAVA不支持多继承 ,但通过接口可以弥补不支持多继承而带来的子类不 可使用多个父类成员的不足。 多态性:多态性是指程序中出现的同名不同意现象 2.类与类成员(变量) 类是java程序的基本单位,一种自定义的数据类型,又 称为类类型。它是同种对象的抽象/模板,对象称为类 的实现/实例。 类的定义格式 class extends implements 说明: v关键字class声明一个新类,声明不是创建。 v关键字extends说明定义的新类是哪个已存在类的子类 。父类可以是java语言库中定义的类,也可以是自己定义 好的类。 v关键字implements,说明当前定义的新类中实现那些 接口所定义的功能和方法。 v类修饰符用来说明类的作用域和其它性质,有4种: public:说明该类为公共类,它可以被其他类所使 用。一个文件中最多只能有一个public类。 abstract:使用该修饰符的被称为抽象类。抽象类是 一种没有具体对象的概念类。不能创建实例。 final:说明该类不能有子类,故称为最终类。这种 类是用来完成某种标准功能的类。final和abstract不 能用来同时修饰一个类。 默认说明:规定该类只能被同一个包中的类使用, 而不能被其他包中的类所访问。 类体的内容:由两部分构成:一部分是变量的定义, 用来刻画属性;另一部分是方法的定义,用来刻画功能 。 例:定义一个描述学生3门课成绩的类。 class Student String name,stuNumber; double score1,score2,score3; name=“zhangsan”; void setBase(String s1,String s2) name=s1; stuNumber=s2; System.out.println(name+“ “+stuNumber); double setScore(double d1,double d2,double d3) double d; score1=d1; score2=d2; score3=d3; d=d1+d2+d3; return d; /错,只能是变量定义语 句,不能有其它语句。但 可以把定义与赋值合并。 变量 成员变量可以是简单变量,也可以是某个类的对象,还 可以是数组和其它复杂结构。 v成员变量的定义格式 简单成员变量的定义格式: =; 对象成员的定义格式: =new (); v变量的修饰符:有访问控制修饰符和非访问控制修饰符 。 非访问控制修饰符: (1)静态变量 static。静态变量属于类,属于所有对象 的共享变量。静态变量的引用可以使用类名,也可以使 用对象。例:Student.java中加入学生个数。 (2)最终变量 final。最终变量就是常量,不允许修改, 最终变量通常被说明为static。 (3)易失变量 volatile。被volatile修饰的变量可能同 时被多个线程所控制和修改。 /修饰符static练习,文件名Stu.java class Student String name,stuNumber; static int count;/学生个数 double score1,score2,score3; void setBase(String s1,String s2) name=s1; stuNumber=s2; System.out.println(name+“:“+s1); double setScore(double d1,double d2,double d3) double d; score1=d1; score2=d2; score3=d3; d=d1+d2+d3; return d; public class Stu public static void main(String args) Student s1=new Student();/构造方法 s1.count+; System.out.println(s1.count); Student s2=new Student();/构造方法 s2.count+; System.out.println(s1.count); 运行结果为: 1 2 访问控制修饰符 (1)私有访问控制 private。使用该修饰符说明的变量仅 可被该类自身访问,任何其他类都不可访问,包括该类 的子类。 (2)默认访问控制符。类中变量若无访问控制符,则具有 包访问性,可被同一个包的其他类所访问。 (3)保护访问控制符 protected。使用该修饰符说明的变 量可被该类自身、同包的其他类和其他包中该类的子类 所访问。 (4)公有访问控制符 public。具有该修饰符的变量称为公 共变量。如果它属于公共类,可以被所有类所访问。 v变量小结: 1)成员变量和局部变量:变量定义部分所定义的变量称 为类的成员变量。方法体中所定义的变量和方法的参数 称为局部变量。成员变量在整个类内都有效,局部变量 只在定义它的方法中有效。class Sun int distance; int find() int a=12; distance=a; return distance; void g() int y; y=a; /合法 /非法 2)如果局部变量的名字与成员变量的名字相同,则成 员变量被隐藏,即这个成员变量在这个方法内暂时实 效。如果想在该方法内使用成员变量,必须使用关键 字this。(关键字this用法1:this.xxx代表成员变量) class Tom int x=98,y; void f() int x=3; y=x; /y=?3 or 98 y=this.x; this指的是当前对象;this有时 可省略(成员变量的名字和局部变 量的名字相同时不可省略)。 3)成员变量又分为实例成员变量和类成员变量。 3.对象及其创建与应用 对象的声明、创建格式 ;/声明 =new();/创建 或写成: =new(); 创建对象包含声明对象;用new为对象分配内存单元; 为对象初始化3方面的内容。 构造方法 class Point int x,y; Point(int a,int b) x=a; y=b; public class A public static void main(String args) Point p1,p2,p3; p1=new Point(10,10); p2=new Point(5,6); p3=p1; 对象的内存模型(理解) 1)声明对象时的内存模型 Point p1; 2)为对象分配内存后的内存模型 p1=new Point(10,10); 系统会为各个成员变量(x,y)分配内存单元, 没有指定初值则使用默认值;接着返回一个引 用(地址)给对象变量p1。以确保这些变量能 被对象p1操作。 p1 效果如图: p1 0xAB12 10 10x y 3)创建多个对象 p1=new Point(10,10); p2=new Point(5,6); p1 0xAB12 10 10x y p2 0x110C 6 5x y 4)对象赋值.可以将同一个类的一个已知对象赋值给另 一个对象。赋值时是将这个对象的地址值赋值给另一 个对象的地址值,两个具有相同地址值的对象实际上 是一个对象,它具有两个名字。 p3=p1; p1 0xAB12 10 10x y p3 0xAB12 创建一个对象必须用构造方法,构造方法的最主要功能 是对创建的对象进行初始化。 特点:方法名同类名;无返回类型(省去void);在创建 对象时,系统自动调用。 多个构造方法的问题:构造方法可以没有参数,也可以由多个参数 ,.ie.构造方法可重载(出现多个构造方法)。构造方法不能被编 程人员调用,在用new建类的对象时,由系统自动根据实参个数类 型调用,参数传递和形实结合也在此时完成。 =new (); 定义类时如果不定义任何构造方法,系统会自动生成一个默认的无 参数的构造方法,使用它所创建的对象具有默认值。 但是一旦定义了带参数的构造方法,则无参数的构造方法自动失效 ,如果要用,则必须显式定义. 好的习惯:? 构造方法 /检查构造方法应用错误语句 class Point int x,y; Point(int a,int b) x=a; y=b; public class A public static void main(String args) Point p1,p2; p1=new Point(10,10); p2=new Point(); /错误 为什么? /构造方法中使用this(this用法2:构造方法重载时,在一个构 造方法首行调用其它构造方法) class Point int x,y,z; Point() Point(int a,int b) x=a; y=b; Point(int a,int b,int c) /以下两句等价于this(a,b); x=a; y=b; z=c; 4. 类的成员方法 方法定义格式: () throws 说明: 方法说明中必须包含类型、方法名和一对圆括号;方法 体是由一对花括号括起来的若干条语句,其中包含说明 语句和执行语句,也可以为空。 方法的参数和返回值 定义方法时可以有参数,也可以无参数,有多个参数用 逗号分割,每个参数由参数类型和参数名组成。 有些方法有返回值,有些方法无返回值,无返回值的方 法定义时要加void,返回值可以用return来实现: return ; 要求:表达式的类型与方法中定义的返回值类型相一致 静态方法,意同静态变量。this关键字不能用在静态 方法中。 方法重载:在形式上是在同一个类中具有相同名字,但或者参 数个数、或者参数的类型不同的若干个方法。 目的:重载通常用于创建执行类似任务的同名、但参数类型或参 数个数不同的方法,程序会自动根据给出的实参来匹配到底选择 哪一个方法。(多态性的体现)例: int add(int i,int j) return i+j; float add(float i,float j) return i+j; double add(double i,double j) return i+j; int add(int i,int j,int k) return i+j+k; 匹配原则: 1)完全匹配为最佳方案。 2)如果不能完全匹配时,尽量选择类型转换代 价最小的一种方案进行匹配。转换匹配遵循下 述原则: (1)参数不能转换的重载方法不能参加匹配。如 布尔 (2)算术类型通常可以相互转换,选择代价最小 的参加匹配。如add(a,b) (3)复合类型作为参数时,子类对象可转换为父 类对象,子类层次最小的方法才会匹配。 public class Overload static int add(int i,int j) return i+j; static double add(double i,double j) return i+j; public static void main(String args) int i1=3,i2=5; char c1=a,c2=b; float f1=3.1f,f2=4.1f; double d1=2.5,d2=3.8; System.out.println(add(i1,i2); System.out.println(add(c1,i1); System.out.println(add(i1,f1); System.out.println(add(f1,d1); System.out.println(add(d1,i2); 方法的调用 调用方式、参数传递 返回值 抛出异常(中断) 参数传递问题: 基本数据类型作为方法参数时,参数传递的是变量值的一份拷贝, 因此,不能改变调用方法中的参数值。 复合数据类型作为方法参数时,参数传递的是对象的地址,因此, 对参数的改变会影响到原来的参数值。 方法调用练习 1递归求fibonacci数列 2复合类型:编写一个方法,能把一个整型数组按升序排序 public class A public static void main(String args) int array=5,4,3,2,1; int a=0; int b=0; conveyValue(a,b); System.out.println(“a=“+a+“,b=“+b); converAddress(array); for(int i=0;iarray.length;i+) System.out.println(“array“+i+“=“+arrayi); static void conveyValue(int x,int y) x+=2; y+=3; System.out.println(“x=“+x+“,y=“+y); static void converAddress(int array1) for(int i=0;iarray1.length;i+) array1i+=1; System.out.println(“array1“+i+“=“+array1i); 类成员(静态成员、实例成员)调用注意事项: 1)实例方法既能对类变量操作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公共卫生执业医师考试卫生教育课程开发试题及答案
- 光电工程师证书考试全方位试题及答案
- 文化与科技结合的案例解析试题及答案
- 恩科取士试题及答案
- 文化产业管理证书考核素质试题及答案
- 幼儿园营养计划的科学基础试题及答案
- 2025年公共卫生考试新方式试题及答案
- 2024年文化产业管理考试的可持续发展理念分析试题及答案
- 四级试题及答案2015
- 2024年护士资格证的重要复习资源试题及答案
- TPX6111B数显卧式铣镗床使用手册3
- 法莫替丁注射液-外科
- 【采购管理优化探究文献综述3000字】
- +山东省泰安市肥城市2023-2024学年七年级下学期期中考试英语试题+
- (高清版)WST 830-2024 外照射放射防护剂量转换系数标准
- (高清版)JTGT 5440-2018 公路隧道加固技术规范
- CHT 9016-2012 三维地理信息模型生产规范(正式版)
- 经济学说史考试重点PDF
- MOOC 太极拳初级-浙江大学 中国大学慕课答案
- Q-GDW 1202-2015国家电网公司应急指挥中心建设规范
- MOOC 大学生创新创业基础-福建农林大学 中国大学慕课答案
评论
0/150
提交评论