版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、03 编程基础,类 对象 包 继承 访问权限 接口 jar文档,本章基本要求,深刻理解OOP中类和对象的概念 会定义类、并会由类创建对象 深刻理解类的成员变量和成员方法 理解包的概念、会使用包语句 深刻理解继承的概念、掌握Java的继承方式 在掌握包和继承等概念的基础上,掌握访问权限问题 结合类掌握接口的概念、并会定义和使用接口 会使用jar工具将相关文件打成jar文档并发布,类,济南大学 信息科学与工程学院 2006,类的概念 类是组成Java程序的基本单元 类是用来创建对象的模板(对象是类的实例) OOP的三个基本特性: 封装性:类封装了一类对象的状态(成员变量)和功能(成员方法) 继承性
2、:可在已有类的基础上进行扩展,产生子类,实现代码重用和功能的扩充 多态性:方法的重载(静态)和覆盖(动态) Java提供了大量的类供用户使用(JFC) 面向对象程序设计的主要工作: 了解已有类的基本情况 扩展已有类建立自己的新类并创建有关对象 实现它们之间的交互完成系统目标,济南大学 信息科学与工程学院 2006,类的声明 格式 访问修饰符 class ClassName 成员变量声明; 成员方法声明; 说明 访问修饰符可以是public或省略 类名中每个词的首字母大写,做到见名知义 成员变量用来刻画类的属性(状态);成员方法用来刻画类的功能; 通过成员方法可使实现对成员变量的操作,济南大学
3、信息科学与工程学院 2006,举例(Example0301_Circle.java) public class Example0301_Circle double r; double s; void setR(double r1) r = r1; double getR() return r; double getS() return 3.14 * r * r; ,r=5.5;,/此处的语句是非法的,Why?,济南大学 信息科学与工程学院 2006,变量 变量的种类 实例成员变量(简称实例变量) 类成员变量(简称类变量) 局部变量 注意:在Java类的定义中没有全局变量的概念 变量的声明 实例
4、变量:访问修饰符 类型名 变量名; / private double r; / int s; 类变量:访问修饰符 static 类型名 变量名; / public static int a; 局部变量:类型名 变量名;/ double x;,济南大学 信息科学与工程学院 2006,说明 一个类中不允许出现两个同名的成员变量 类的成员变量可以和方法中的局部变量同名 一个方法中不允许出现两个同名的局部变量 public void f() int x = 1; for (int i = 0; i 10; i+) int x = 0; /error System.out.println(“i=“ +
5、i); /error ,济南大学 信息科学与工程学院 2006,变量的作用域 实例成员变量和类成员变量在整个类中有效 局部变量只在定义它的复合语句中有效 当局部变量与成员变量重名时,在局部变量的作用域内成员变量被隐藏,例如: class Tom int x = 98, y; void f1() int x = 3; y = x; /此处y=3 void f2() y = x; /此处y=98 /尽量避免局部变量与成员变量重名,济南大学 信息科学与工程学院 2006,成员方法(简称方法) 方法的种类 实例方法 类方法 /实例方法和类方法的区别在于声明时是否使用了关键字static,带有stati
6、c的是类方法 方法的声明 访问修饰符 static 返回值类型 方法名(形参表) 局部变量说明部分;/不一定有 语句部分;/一般要有,以实现方法的功能 ,济南大学 信息科学与工程学院 2006,说明 方法一般都使用public进行访问修饰 没有返回值的方法要用void类型修饰 一个方法可以没有形参表,但要保留() 例如: public double getArea()double area;area = ;return area;,济南大学 信息科学与工程学院 2006,构造方法 构造方法是与类名同名且没有返回值的一类特殊的实例方法 构造方法是在创建(new)对象时调用的 构造方法是可以重载(
7、可以有多个)的 确定一个类中所拥有的构造方法:若存在显式定义的构造方法有几个就是几个;否则只有一个默认的无参的构造方法,济南大学 信息科学与工程学院 2006,构造方法示例 public class Circle double r; public Circle() r = 1.0; public Circle(double rr) r = rr; / 其他方法定义 思考问题: 该类中共有几个构造方法? 若去掉构造方法后共有几个构造方法? 若去掉构造方法后共有几个构造方法? 若去掉构造方法和后共有几个构造方法? / 默认的构造方法实现将成员变量初始化为默认值,济南大学 信息科学与工程学院 200
8、6,方法的重载 方法重载是指一个类中可以有多个方法具有相同的名字,但它们的参数必须不同(个数或类型不同) 如果两个方法的返回值类型不同,但参数相同,这种情况下的重载是不允许的 重载可以实现同一个方法名的多种不同功能,体现了静态多态性 例如: public void f(); public int f(int a); public double f(int a); /error public double f(double a);,济南大学 信息科学与工程学院 2006,内部类 定义在某个类里面的类,称为嵌入类或内部类 在下例中,B就是一个嵌入类 public class A class B 嵌
9、入类可访问被嵌入类的变量和方法 嵌入类的字节码文件名为:A$B.class 嵌入类主要用于创建适配器类(一般匿名) 在一个方法内部定义的类,称为局部内部类 其他类要想访问内部类时,可如下操作: A a = new A(); A.B b = a.new B();,对象,济南大学 信息科学与工程学院 2006,对象的概念 对象是类的实例,它具有状态、行为和身份 类相当于定义的一种数据类型(静态的)而对象就是该类型的一个变量(动态的),济南大学 信息科学与工程学院 2006,对象的声明 格式:访问修饰符 类名 对象名; 例如:Circle circle1, circle2; String s;,济南
10、大学 信息科学与工程学院 2006,对象的创建 格式:对象名 = new 类的构造方法(实参表); 例如:circle1 = new Circle(); circle2 = new Circle(5.5); s = new String(“Hello!”);,济南大学 信息科学与工程学院 2006,对象的内存模型 一个声明后的对象变量用来存放对象的引用 在未获得分配的内存前,对象变量的值为null 为对象分配的内存空间,称为该对象的实体 在分配内存空间(new)后,对象变量中存放这块内存空间(实体)的引用(内存空间代表) 一个对象变量的值会由于赋值而发生改变,济南大学 信息科学与工程学院 20
11、06,变量的内存模型 类变量的内存是在类的字节码文件被加载到内存时就分配的,且只分配一次,各对象共享,直到程序退出时释放(所有对象只有一个内存映像) 实例变量的内存在每次创建对象时分配,不同对象的实例变量所占内存空间不同,当该对象不存在时释放(每个对象都有一个内存映像) 局部变量的内存在定义该局部变量的复合语句被调用时分配,语句块执行完毕后释放,济南大学 信息科学与工程学院 2006,方法的内存模型 类方法的内存是在类的字节码文件被加载到内存时就分配的,且只分配一次,各对象共享,直到程序退出时释放(只有一个内存映像) 实例方法的内存在第一次创建对象时分配,且只分配一次,各对象共享,当该类的所有
12、对象都不存在时释放(只有一个内存映像),济南大学 信息科学与工程学院 2006,实例考查 class A int x; /实例变量 static int y; /类变量 public float f(int x1,int x2) /实例方法 public static float g(int a) /类方法 ,济南大学 信息科学与工程学院 2006,A a1,a2;,a1 = new A();,a2 = a1;,a2 = new A();,加载类A时,类变量y和类方法g即被分配内存,济南大学 信息科学与工程学院 2006,对象的使用 访问变量 格式:对象名.变量名 对于类变量常用:类名.变量名
13、 访问方法 格式:对象名.方法名(实参表) 对于类方法常用:类名.方法名(实参表),济南大学 信息科学与工程学院 2006,说明 类变量和类方法在不创建对象时就可以用类名进行访问 类方法只能操作类变量,只能调用类方法 实例方法对实例变量和类变量都能操作, 对实例方法和类方法都能调用 参数的值传递 基本数据类型和引用数据类型都是值传递 值传递的本质在于系统为实参和形参分配不同的内存单元 复合的概念 对于一个类的成员变量来说,既可以是基本数据类型,也可以是引用数据类型 如果是类类型的成员变量,即出现了复合 例子: Example0302_Taper.java,包,济南大学 信息科学与工程学院 20
14、06,包的概念 包是有效管理类的一种机制,它可将相关的类组织在一起(类的集合) 包的使用能够减少命名冲突问题,能够提供更多方面的保护 包是分层次的,即采用树形结构定义 包是不嵌套的,没有任何一个包包含另一个包 JDK中提供了大量的包供用户使用,济南大学 信息科学与工程学院 2006,包的声明 格式:package 包名; 说明 package语句必须是源文件的第一条语句 若源文件中无package语句,则是无名包 包名可以仅是一个合法的标识符,也可以是以“.”分割的若干个标识符的组合,如:package myself; package XXX.YYY.ZZZ; 当声明了一个包时,要求目录结构中
15、存在与包名对应的目录,例如若有:package tom.jiafei;则应存在:.tomjiafei 例子:Example0303_Package.java,济南大学 信息科学与工程学院 2006,导入包中的类 导入方法 import java.util.Date;import java.awt.*; 注意:只有包中的公共类被导入 说明 系统自动引入java.lang包中的类 当导入自定义包中的类时,可能需要更新classpath的值,以便系统能找到要导入的类 若导入的类中有重名时,会出现错误提示 若不导入包中的类,就要使用类的全名,这样很不方便,如:java.awt.Font f=new j
16、ava.awt.Font(); 导入多余的类,会增加编译时间,但不会增加运行时间,济南大学 信息科学与工程学院 2006,Java中常用的包 java.lang(由系统自动导入其中的类) java.awt java.awt.event java.util java.io java.applet java.sql javax.swing,继承,济南大学 信息科学与工程学院 2006,继承的概念 继承是OOP中实现代码重用的一种方式 继承是一种从已有的类创建子类的机制 子类继承已有类的状态和行为,并可以扩充 由继承而得到的类叫子类,被继承的类叫超类 Java中不支持多继承(子类只能有一个超类) 在
17、Java类层次结构的顶端是Object类 在未指定超类的类定义中,其超类默认为Object,济南大学 信息科学与工程学院 2006,子类的创建 格式 访问修饰符 class 子类名 extends 超类名 示例 import javax.swing.JApplet;public class MyClass extends JApplet,济南大学 信息科学与工程学院 2006,this关键字 this是一个代表当前对象的特殊关键字 this只能用在实例方法中,不能出现在类方法中 this的基本用法如下例所示: class A int x; A(int x) A(int x,int y) voi
18、d f() this.x = x; this(x); int x = 3; this.x += y; this.x = x + 5; 区别于形参 调用其它构造方法 区别于局部变量 注意:通过this调用构造方法时只能是第一条语句,济南大学 信息科学与工程学院 2006,super关键字 super是一个代表超类的特殊关键字 super只能用在实例方法中,不能用在类方法中 super的基本用法如下例所示: class A class B extends A int x; int x; A(int x) B(int x,int y) this.x = x; super(x);/去掉此句会出错 th
19、is.x = super.x + y; 注意:通过super调用超类的构造方法时只能是第一条语句;子类必须显示/隐式地调用超类的构造方法,济南大学 信息科学与工程学院 2006,上转型对象 由于继承性,可以把一个子类对象的引用放到一个超类对象中。若A是B的超类,则: B b = new B(); A a = b; 这时称超类对象a为子类对象b的上转型对象。但a不能访问b中新增加的变量和方法 反过来赋值时要进行强制类型转换,两种情况 把上转型对象赋给子类对象,如 b = (B)a;则b得到子类定义的所有变量和方法 把未经过上转的超类对象赋给子类对象,如: A aa = new A(); b =
20、(B)aa; /这种赋值不能使用 当超类对象接收不同的子类对象时,对于被覆盖的方法的调用可能会体现出动态多态性,访问权限,济南大学 信息科学与工程学院 2006,包的访问 包的访问是没有控制的,根据需要导入即可 例如:import java.io.*;,济南大学 信息科学与工程学院 2006,类的访问修饰符 public:公共类,任何类都可以访问 默认(省略):友好类,同一包中的类可访问,济南大学 信息科学与工程学院 2006,类的其它属性(跟在访问修饰符后面) final:最终类,不能被其他类所继承 abstract:抽象类 一般用于描述层次较高类(提供行为模板) 抽象类常含有抽象方法以描述
21、应具有的功能 抽象方法只有说明,没有方法体 抽象类中也可以没有抽象方法 若一个类中含有抽象方法则该类必须为抽象类 抽象类的对象不能用new创建 应用时需要继承抽象类而产生非抽象的子类,并且子类要实现其中所有的抽象方法;否则子类也要声明为抽象的,济南大学 信息科学与工程学院 2006,成员变量和成员方法的访问修饰符 public:公共的 protected:受保护的 默认(省略):友好的 private:私有的,济南大学 信息科学与工程学院 2006,子类继承超类成员的规则,济南大学 信息科学与工程学院 2006,若子类的成员变量与超类中的同名,则该变量不是从超类继承来的,而属于子类中新定义的
22、class A class B extends A int x; int x;A(int x) B(int x,int y) super(x); this.x = x; this.x = 5; this.x += super.x + y; class C public static void main(String args) A a = new A(1); B b = new B(3,3); ,请思考去掉B中的 int x; 语句时的情况,济南大学 信息科学与工程学院 2006,若子类的方法与超类中的相同,则称为子类覆盖了超类中的该方法(动态多态性) 子类重写超类中的方法时,不能降低访问权限
23、。高低顺序:public,protected,默认,private 当超类中的一个方法未被子类重写时,则子类继承了该方法,其行为与超类中的相同 当某个对象调用一个方法时,它实际上是沿着继承的层次逐层向上查找该方法的定义的 构造方法是不可以继承的 子类的每个构造方法都必须在一开始调用父类的某一个构造方法;若子类的构造方法未显式调用父类的构造方法,则系统默认调用的是父类的无参构造方法,此时如果父类中不存在无参的构造方法,就会出错,济南大学 信息科学与工程学院 2006,成员变量和成员方法的访问权限,济南大学 信息科学与工程学院 2006,成员变量的其它属性 static:用于定义类成员变量 fin
24、al:相当于定义常量,只能初始化一次,以后其值不能被修改,济南大学 信息科学与工程学院 2006,成员方法的其它属性 static:用于定义类成员方法 final:此种方法在子类中不能被覆盖 abstract:此种方法不能含有方法体,且包含此种方法的类必须声明为抽象类 synchronized:用于线程同步访问,济南大学 信息科学与工程学院 2006,例子:Example0304_Inheritance.java,接口,济南大学 信息科学与工程学院 2006,接口的概念 接口提供了其他类要实现的一个行为模板 与抽象类不同的是:使用相同接口的类不一定要有继承关系 接口中成员变量默认都是publi
25、c static final 接口中所有方法都是只声明不实现 接口中方法默认都是public abstract,济南大学 信息科学与工程学院 2006,接口的声明 格式 访问修饰符 interface 接口名 常量声明; 方法声明; 访问修饰符可以是public或默认(省略),其含义和规定与声明类相同 示例 public interface ShapeAreapublic static final int TYPE = 1;public abstract double getArea();,济南大学 信息科学与工程学院 2006,接口的使用 格式 访问修饰符 class 类名 implemen
26、ts 接口名列表 说明 若一个类使用了某接口,它必须实现该接口中声明的所有方法,并用public修饰 若一个类使用了某个接口,但没有实现该接口中的所有方法,该类必须是abstract类 不能用new实例化一个接口,但可以声明接口变量,并可以接收实现该接口的类对象 接口也可以使用extends关键字进行扩展,济南大学 信息科学与工程学院 2006,接口回调 接口回调是指可以把实现某一接口的类所创建的对象的引用赋给用该接口声明的接口变量,则该接口变量就可调用被类实现的接口中的方法 在需要的时候也可以强制把一个接口变量再转换为实现该接口的一个类对象 接口回调也体现了动态多态性,济南大学 信息科学与工
27、程学院 2006,例子 Example0305_Interface.java,Jar文档,济南大学 信息科学与工程学院 2006,Jar文档的概念 jar文件是一种将相关文件组织在一起,并且进行了压缩的文件格式,扩展名为.jar 使用jar文档可以用来发布应用程序,济南大学 信息科学与工程学院 2006,生成Jar文档 使用JDK提供的 jar.exe 命令 格式:jar cvf 压缩后的文档名 被压缩的文件,济南大学 信息科学与工程学院 2006,解压Jar文档 格式:jar xvf 压缩后的文档名 也可使用其它的解压软件,如 WinRAR 等,济南大学 信息科学与工程学院 2006,执行Jar文档
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年物流特种设备安全题库
- 持续提升拼搏教育承诺书4篇范文
- 技术开发研究持续保证承诺书(6篇)
- 采购计划季度调整汇报确认函(9篇)
- 质量管理体系建立与运行标准化手册
- 电子技术领域承诺书(8篇)
- 项目进度管理与任务分配模板
- 市场经营行为准则与公平竞争保证承诺书(7篇)
- 乐山古城墙研究报告
- 蓝色食物科学研究报告
- 2025-2030中国槟榔行业市场发展趋势与前景展望战略研究报告
- 2024年注册安全工程师考试(初级)安全生产法律法规试题与参考答案
- 《临床生物化学检验》糖代谢紊乱的生物化学检验-课件
- 人教版2025三下英语单词表
- 佛山暴雨强度公式-2016暴雨附件:-佛山气象条件及典型雨型研究
- 《游戏行业发展》课件
- 反家暴知识培训系列课件
- 老旧小区改造给排水方案
- 生猪屠宰加工合同范例
- 2024年版手足口病
- 奶茶店店长职能培训
评论
0/150
提交评论