《JAVA语言程序设计》第3章1.ppt_第1页
《JAVA语言程序设计》第3章1.ppt_第2页
《JAVA语言程序设计》第3章1.ppt_第3页
《JAVA语言程序设计》第3章1.ppt_第4页
《JAVA语言程序设计》第3章1.ppt_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,类和对象,面向对象概述 编程语言的发展 面向对象的五个基本概念 类的描述 类成员的访问 成员方法,2,面向对象概述,什么是编程语言? 人和计算机进行交流的工具和手段 编程语言的发展 机器语言: 0101001 汇编语言: mov, push, add, call 第三代语言: 高级语言,以C语言为代表,过程式编程语言(Procedural Programming Language) 第四代语言: 非过程化/面向对象的编程语言 语言的发展: 抽象的过程,3,面向对象概述,面向对象(Object Oriented-OO) 面向对象编程 Object Oriented Programming-O

2、OP 面向对象是一种软件开发的方法 “面向对象的分析与设计”-研究生课程 Object Oriented Analyse System.out.println(hello world);,10,面向对象概述,消息 (message) Light lt = new Light(); lt.on();,11,面向对象概述,类 (class) 概念的最早起源 亚里士多德: the class of fishes and the class of birds 现实世界中存在很多同类的对象,很多桌子、书、自行车 类是一种原型(prototype),一种抽象,一种共性,一个模板 Every object

3、has a type 类的具体化/实例化(instance)就得到一个对象 一个对象是类的一个特定实体 类是对象的一种抽象 表格(类) 填入不同的个人信息不同的对象,12,面向对象概述,类和对象的关系 类是对象的模板(template)/抽象 一个对象是类的一个实例(instance),13,面向对象的基本概念,继承 (inheritance) 为什么会有继承? 建立一个类后,发现另一个新的类有相类似的特性,两个选择: 重新定义一个新的类; 在已有类的基础上进行扩展(增加或赋予新的特性) 父类和子类 子类继承(拥有)父类所有的属性和方法 同时子类可以定义新的属性和方法 “青出于蓝,而胜于蓝”

4、树型结构(层次化结构) 根(基类),14,面向对象概述,继承 (inheritance),运输工具,航空运输工具,陆地运输工具,水上运输工具,人力驱动,引擎驱动,二轮,四轮,客运,货运,15,面向对象的基本概念,继承 (inheritance) 继承关系的表示,16,面向对象的基本概念,继承 (inheritance) 多重继承,类A,类B,类C,类D,类F,类G,一个类拥有多个父类产生二义性,若类C和类D都有一个同名的方法,类G? JAVA中仅仅支持单一继承,同时JAVA采用Interface(接口)实现多重继承而避免父类二义性,17,面向对象的基本概念,多态性 (polymorphism)

5、 存在于子类和父类之间 多个子类同属一个父类,所有子类有相同的父类 (继承父类的方法) 在不同的子类中同样的方法有不同的表现形式,18,面向对象的基本概念,多态性(polymorphism) 多态性的表示,19,面向对象的基本概念,多态性 (polymorphism),class Square extends Shape void draw() System.out.println(Square.draw(); void erase() System.out.println(Square.erase()“); class Triangle extends Shape void draw() S

6、ystem.out.println(Triangle.draw(); void erase() System.out.println(Triangle.erase(); ,class Shape void draw() void erase() class Circle extends Shape void draw() System.out.println(Circle.draw(); void erase() System.out.println(Circle.erase(); ,20,面向对象的基本概念,多态性 (polymorphism),public class Test publi

7、c static Shape randShape() switch(int)(Math.random() * 3) default: case 0: return new Circle(); case 1: return new Square(); case 2: return new Triangle(); public static void main(String args) Shape s = new Shape9; for(int i = 0; i s.length; i+) si = randShape(); for(int i = 0; i s.length; i+) si.dr

8、aw(); ,运行结果: Circle.draw() Triangle.draw() Circle.draw() Circle.draw() Circle.draw() Square.draw() Triangle.draw() Square.draw() Square.draw(),对应: s0 s1 s2 s3 s4 s5 s6 s7 s8,java.lang.Math类 public static double random() 0.0=返回值1.0,21,类和对象,面向对象概述 编程语言的发展 面向对象的五个基本概念 类的描述 类成员的访问 成员方法,22,程序是对象的集合,而对象是类

9、的实例化 源程序就是一个个的Java类 JAVA本身提供的类(核心API) 见JAVA文档中描述 程序员可以对其进行调用 jrelibrt.jar(22.4MB) 程序员如何定义自己所写的类,类的描述,23,类的定义格式 类修饰符 class 类名extends 父类名 implements 接口名 类型成员变量1; 类型成员变量2; 类型成员方法1(参数1, 参数2, ) 方法体; 类型成员方法2(参数1, 参数2, ) 方法体; ,类的描述,24,定义一个Car类,类的描述,25,Car类的应用 class Test public static void main(String args)

10、 Car mycar = new Car(“Audi”, 10); mycar.display(); mycar.run(); System.out.println(“汽车正在运行!”); mycar.run(); ,类的描述,D:java Test 品牌: Audi 油量: 10 汽车正在运行! 没有油了! D:,实例化一个对象mycar,26,类的定义格式 类修饰符 class 类名 extends 父类名 implements 接口名 常见的类修饰符 public: Declares that the class can be used by any class regardless o

11、f its package (无任何限制) 无修饰: a class can be used only by other classes in the same package (仅仅能被同一个包中的其他类引用) abstract: Declares that the class cannot be instantiated (声明该类不能被实例化,抽象类) final: Declares that the class cannot be subclassed (声明该类不能有子类),类的描述,27,包(package)的概念 package org.jalpha; class test 源文

12、件位置: “D:srcorgjalphatest.java” 编译方法1: “cd D:srcorgjalpha” “javac test.java” 编译方法2: “cd D:src” “javac orgjalphatest.java” class文件位置: “D:srcorgjalphatest.class” 运行: “cd D:src” “java org.jalpha.test”,类的描述,28,包(package)的概念 构成层次化的结构 通过包来管理类名空间 防止同名类名的冲突,类的描述,对个体(个人和机构) 将类文件放在不同的目录下 防止重名 orgjalphamethod1*

13、.java method2*.java,ABC 公司 Engine.java,XYZ 公司 Engine.java,需调用Engine.java?,ABC 公司 comabcEngine.java,XYZ 公司 comxyzEngine.java,29,包(package)的概念 两个不同的包org.jalpha和org.weeva,类的描述,D:srcorgjalphatest.java,D:srcorgweevatest3.java,package org.weeva; import org.jalpha.*; class test3 ,package org.jalpha; class

14、test ,30,类的修饰符 final: Declares that the class cannot be subclassed (宣布该类不能有子类),类的描述,final class ChessAlgorithm . . . ,class BetterChessAlgorithm extends ChessAlgorithm . . . ,Cant subclass final classes: class ChessAlgorithm class BetterChessAlgorithm extends ChessAlgorithm 1 error,31,类的定义格式 类修饰符 cl

15、ass 类名 extends 父类名 implements 接口名 extends: 继承的关系 implements: 实现哪些接口(interface)的方法,实现多重继承 public class Test extends Frame implements ActionListener, ItemListener ,类的描述,32,类和对象,面向对象概述 编程语言的发展 面向对象的五个基本概念 类的描述 类成员的访问 成员方法,33,对象具有状态和行为 成员变量定义 访问权限修饰符 类型 变量名; 访问权限修饰符 类型 变量名 =初值; 访问权限修饰符 类型 变量名 =初值 ,变量名 =

16、初值; 成员方法定义 访问权限修饰符 方法返回类型 方法名 () throws 异常名 方法体; 类型:基本类型,复合类型(数组、类和接口),类成员的访问,34,访问权限修饰符 public private protected 无修饰 static final,类成员的访问,35,public (公共变量/公共方法) 容许全权访问,无任何限制 (先构造对象,再访问),类成员的访问,同一个包中 class A A() ; public int x; public void print() ; class B void test() A a = new A(); a.x = 100; a.prin

17、t(); ,不在同一个包中 package abc; public class A public A() ; public int x; public void print() ; package xyz; import abc.A; class B void test() A a = new A(); a.x = 100; a.print(); ,直接访问公有变量x 和公共方法print(),36,private (私有变量/私有方法) 仅能在其所定义的类中被访问(先构造对象,再访问),D:javac A.java D:javac B.java x has private access in

18、 A a.x = 100; print() has private access in A a.print(); 2 errors,类成员的访问,同一个包中 class A private int x; private void print() ; void test () print(); class B void test() A a = new A(); a.x = 100; a.print(); ,37,protected (保护变量/保护方法) 容许类本身、同一个包中所有类、以及子类访问(先构造对象,再访问),类成员的访问,同一个包中 class A protected int x;

19、 protected void print() ; class B void test() A a = new A(); a.x = 100; a.print(); ,不在同一个包中 package abc; public class A public A() ; protected int x; protected void print() ; package xyz; import abc.A; class B extends A void test(B b) b.x = 100; b.print(); ,38,无修饰 (友好变量/友好方法) 容许类本身以及同一个包中所有类访问,类成员的访

20、问,同一个包中 class A A() ; int x; void print() ; class B void test() A a = new A(); a.x = 100; a.print(); ,同一个包中 package abc; class A A() ; int x; void print() ; package abc; class B void test() A a = new A(); a.x = 100; a.print(); ,39,小结,类成员的访问,40,static (静态变量/静态方法) 类的变量/方法,独立于类的对象,可以直接根据类名调用 class S st

21、atic int A = 12, B = 34; static void print() ; class Test public static void main(String args) System.out.println(“A=“ + S.A + “ B=“ + S.B); S.print(); ,类成员的访问,41,static (静态变量/静态方法),class Test public void print(int x) System.out.println(x); public static void main(String args) int x = 3; print(x); ,

22、D:javac Test.java Test.java:9: non-static method print(int) cannot be referenced from a static context print(x); 1 error,类成员的访问,42,static (静态变量/静态方法),class Test Test() ; public void print(int x) System.out.println(x); public static void main(String args) int x = 3; Test t = new Test(); t.print(x); ,

23、class Test public static void print(int x) System.out.println(x); public static void main(String args) int x = 3; print(x); ,static方法中仅仅可以调用其他static方法,类成员的访问,43,final 变量/方法 final变量: 定义一个常数,即变量值不能改变 final double AVOGADRO = 6.022e23; final类: 不能有子类 final方法: 方法不能被重写(overriding),不能被子类重新定义,类成员的访问,class A

24、final void print() System.out.println(“1”); class B extends A void print() System.out.println(“1”); ,44,小结 类: public, abstract, final, 无修饰 类成员 public protected private 无修饰 static final,类成员的访问,45,类和对象,面向对象概述 编程语言的发展 面向对象的五个基本概念 类的描述 类成员的访问 成员方法,46,方法: 对象行为的描述 完成某种功能的程序块 定义: 访问权限修饰符 方法返回类型 方法名 () thro

25、ws 异常名 方法体; 方法参数的传递 变量的作用域 方法的重载(overloading)/重写(overriding) 方法的递归调用,成员方法,47,例,成员方法,class Test public static void main(String args) double d_product; Area myArea; myArea = new Area(); d_product = myAduct(); System.out.println(“myArea的面积是: ” + d_product); ,class Area Area() ; double width, hei

26、ght; void set(double w, double h) width = w; height = h; double product() return width*height; ,48,方法参数,成员方法,public static void main(String args) int x=3, y=4; Test p = new Test(); System.out.println(x + + y); p.addI(x, y); System.out.println(x + + y); Vector c = new Vector(); c.addElement(s1); c.ad

27、dElement(s2); System.out.println(c.size(); p.addV(c); System.out.println(c.size(); ,import java.util.Vector; class Test private void addV(Vector v) v.addElement(s3); private void addI(int i1, int i2) i1 +; i2 +; System.out.println(i1 + + i2); ,D:java Test 3 4 4 5 3 4 2 3,49,方法参数,成员方法,传值和传参,注意1: 类型匹配

28、 注意2: 基本类型与复合类型 参数传递的结果不同,Pass by Value In Java methods, arguments are passed by value. When invoked, the method receives the value of the variable passed in. When the argument is of primitive type, pass-by-value means that the method cannot change its value. When the argument is of reference type,

29、pass-by-value means that the method cannot change the object reference, but can invoke the objects methods and modify the accessible variables within the object.,50,例,成员方法,class Example Example() ; int u, v; void compute(int x, int y) int i, j; for (i=1; i=x;i+) j = y+i; System.out.print(j+“ ”); void p( ) u=3; v=2; compute(u, v); System.out.println(); u+=v; v*=u; compute(u, v); public static void main(String args) Example A = new Example(); A.p(); ,u=3; v=2;,u=5; v=10;,计算结果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论