面向对象特征g.ppt
《面向对象特征g.ppt》由会员分享,可在线阅读,更多相关《面向对象特征g.ppt(126页珍藏版)》请在三一办公上搜索。
1、1,Java语言程序设计,刘玉江,2,第三章 面向对象特征,授课内容:基本概念类的定义对象类的继承和多态接口和包常用工具类,3,基本概念,什么是编程语言?人和计算机进行交流的工具和手段编程语言的发展机器语言:0101001汇编语言:mov第三代语言:高级语言,以C语言为代表,过程式编程语言第四代语言:非过程化/面向对象的编程语言,4,面向对象面向对象编程(Object Oriented Programming-OOP)面向对象是一种软件开发的方法,“面向对象的分析与设计”第一个面向对象的语言:Simula-67第一个成功的面向对象编程语言:SmalltalkC+,JAVA,C#,PERL等用客
2、观世界中描述事物的方法来描述程序中要解决的问题万事万物都是对象程序便是成堆的对象,彼此通过消息的传递,请求其他对象进行工作,基本概念,5,五个基本概念对象类封装性继承性多态性,基本概念,6,对象(object)对象包含两个特性状态:指对象本身的信息(内部信息/内部变量)行为:实现对信息的访问/对象的操作标志:代表对象的标识符山地车的状态(两个车轮、一些齿轮、速度、挡数),行为(刹车、加速、减速和换挡)书包含很多信息,拥有访问所包含信息的方法,一页一页的看,通过目录找到感兴趣的内容,基本概念,7,对象(object)状态变量(variables)行为方法(method)对象就是变量和相关方法的软
3、件集合一个对象可以由其他对象组合而成,窗口(按钮,菜单条,文本框,状态栏等)程序就是对象的集合,对象之间相互交互和通信完成任务搭积木,基本概念,8,类(class)现实世界中,存在很多同类的对象,很多桌子、书、自行车一种原型,一种抽象,一种共性,一个模板实例,某类对象的一个特定实体,类是对象的一个抽象,基本概念,9,封装性模块化-每个对象的源文件可以是相互独立的,可以被不同的程序调用,每个对象是一块积木,可以搭建不同的形状信息隐藏-通常定义一个公共接口/方法实现对对象的访问,可以调整对象的私有信息和方法,而不会对其他调用它的对象产生影响可重用性,基本概念,10,继承性,运输工具,航空运输工具,
4、陆地运输工具,水上运输工具,人力驱动,引擎驱动,二轮,四轮,客运,货运,基本概念,11,继承性多重继承,类A,类B,类C,类D,类F,类G,一个类拥有多个父类产生二义性,例类C和类D都有一个同名的方法,类G?Java中仅仅支持单一继承,同时Java采用Interface(接口)实现多重继承而避免父类二义性,基本概念,12,多态性表现在继承中方法的重写子类从父类继承(extends扩展)而来多个子类同属一个父类,所有子类有相同的父类继承父类的方法在不同的子类中有不同的表现形式表现在用一个类中方法的重载,基本概念,13,多态性多态性在继承中的表现,基本概念,14,多态性,class Square
5、extends Shape void draw()System.out.println(Square.draw();void erase()System.out.println(Square.erase()“);class Triangle extends Shape void draw()System.out.println(Triangle.draw();void erase()System.out.println(Triangle.erase();,class Shape void draw()void erase()class Circle extends Shape void dra
6、w()System.out.println(Circle.draw();void erase()System.out.println(Circle.erase();,基本概念,15,多态性,public class Test public 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)
7、Shape s=new Shape9;for(int i=0;i s.length;i+)si=randShape();for(int i=0;i s.length;i+)si.draw();,Circle.draw()Triangle.draw()Circle.draw()Circle.draw()Circle.draw()Square.draw()Triangle.draw()Square.draw()Square.draw(),基本概念,16,程序是对象的集合,而对象是类的实例化源程序就是一个个的Java类Java本身提供的类(核心API)见Java文档中描述程序员可以对其进行调用j2s
8、dk1.4.1_01jrelibrt.jar(22.4MB)程序员自己定义的类,类的定义,17,类的定义格式类的修饰符class 类名 extends 父类名 implements接口名 类型成员变量1;类型成员变量2;类型成员方法1(参数1,参数2,)方法体;类型成员方法2(参数1,参数2,)方法体;,类的定义,18,类的定义格式类的修饰符 class 类名 extends 父类名 implements 接口名 类的修饰符public:公共类,可以被其他类所使用(无任何限制)无修饰/默认说明:仅仅能在同一个包中的其他类引用abstract:宣布该类不能被实例化final:宣布该类不能有子类,
9、类的描述,19,类的定义格式类的修饰符 class 类名 extends 父类名 implements 接口名 extends:继承的关系implements:实现哪些接口(interface)的方法,实现多重继承public class Test extends Frame implements ActionListener,ItemListener,类的描述,20,一个简单的类class Student String name,stuNumber;double score1,score2,score3;void set1(String s1,String s2)name=s1;stuNum
10、ber=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;,类的描述,21,包(Package)的概念package org.jalpha;class test 源文件位置:“D:srcorgjalphatest.java”编译方法1:“cd D:srcorgjalpha”“javac test.java”编译方法2:“cd D:src”“javac org
11、jalphatest.java”class文件位置:“D:srcorgjalphatest.class”运行:“cd D:src”“java org.jalpha.test”,类的描述,22,包(Package)的概念通过包来管理类名空间防止同名类名的冲突层次化的结构,类的描述,对个体(个人和机构)将类文件放在不同的目录下防止重名orgjalphamethod1*.java method2*.java,ABC 公司Engine.java,XYZ 公司Engine.java,需调用Engine.java?,ABC 公司comabcEngine.java,XYZ 公司comxyzEngine.ja
12、va,23,包(Package)的概念package org.jalpha;class test,类的描述,D:srcorgjalphatest.javaD:srcorgjalphatest1.javaD:srcorgjalphatest2.java,24,对象具有状态和行为成员变量定义访问权限修饰符 类型 变量名;访问权限修饰符 类型 变量名=初值;成员方法定义访问权限修饰符 方法返回类型 方法名()throws 异常名 方法体;类型:基本类型,复合类型(数组、类和接口),类成员-变量和方法,25,访问控制修饰符公共访问控制符public 被所有类访问默认访问控制符被同一包中其他类访问私有访
13、问控制符 private被该类自身访问保护访问控制符 protected该类自身、同一个包中的其他类、其他包中的子类访问私有保护访问控制符private protected该类自身、所有子类访问,类成员变量的访问,26,非访问控制修符静态变量static属于类的变量最终变量final值在程序的执行过程中不会改变易失变量volatile可能同时被多个线程所控制和修改,类成员变量的访问,27,public(公共变量/公共方法)容许全权访问,无任何限制(先构造对象,再访问),类成员的访问,class A public int x;public void print()class B void tes
14、t()A a=new A();a.x=100;a.print();,package abc;class 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(),28,private(私有变量/私有方法)仅能在其所定义的类中被访问(先构造对象,再访问),D:javac A.javax has private access in A a.x=100;print()has private acce
15、ss in A a.print();2 errors,类成员的访问,class A private int x;private void print()class B void test()A a=new A();a.x=100;a.print();,29,protected(保护变量/保护方法)容许类本身、子类(有一定限制)以及同一个包中所有类访问(先构造对象,再访问),类成员的访问,class A protected int x;protected void print()class B void test()A a=new A();a.x=100;a.print();,package a
16、bc;class A protected int x;protected void print()package xyz;import abc.A;class B extends A void test(A a,B b)a.x=100;a.print();b.x=100;b.print();,/illegal/illegal/legal/legal,30,无修饰(友好变量/友好方法)容许类本身以及同一个包中所有类访问,类成员的访问,class A int x;void print()class B void test()A a=new A();a.x=100;a.print();,packag
17、e abc;class A int x;void print()package abc;class B void test()A a=new A();a.x=100;a.print();,31,小结,*指子类与父类不在同一个包中的情况,类成员变量的访问,32,static(静态变量/静态方法)类的变量/方法,独立于类的对象,可以直接根据类名调用class S static int A=12,B=34;static void print()class Test public static void main(String args)System.out.println(“A=“+S.A+“B=“
18、+S.B);S.print();,类成员变量,33,static(静态变量/静态方法),class Test public void print(int x)System.out.println(x);public static void main(String args)int x=3;print(x);,D:javac Test.javaTest.java:9:non-static method print(int)cannot be referenced from a static context print(x);1 error,class Test public void print
19、(int x)System.out.println(x);public static void main(String args)int x=3;Test t=new Test();t.print(x);,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方法,类成员,34,final 变量/方法final变量:定义一个常数,即变量值不能改变final double
20、 AVOGADRO=6.022e23;final类:不能有子类final方法:方法不能被重写(overriding)class ChessAlgorithm.final void nextMove(ChessPiece pieceMoved,BoardLocation newLocation).,类成员变量,35,非访问控制修符静态方法static属于类的方法最终方法final不能被子类重新定义的方法抽象方法abstract只有方法说明,没有具体实现本地方法native以其他语言实现方法功能同步方法synchronized用于多线程程序中的协调和同步,类成员方法的访问,36,例,成员方法,cl
21、ass Test public static void main(String args)double d_product;Area myArea;myArea=new Area();d_product=myArea.product();System.out.println(“myArea的面积是:”+d_product);,class Area double width,height;void setV(double w,double h)width=w;height=h;double product()return width*height;,37,方法参数,成员方法,形参和实参,D:ja
22、va Parameter3 43 423,注意1:类型匹配注意2:基本类型与复合类型参数传递的结果不同,38,例,成员方法,u=3;v=2;,u=5;v=10;,输出结果:3 4 511 12 13 14 15,39,方法的重载(overload)方法名相同,但方法的参数不同方法描述 方法名(标识符)参数类型 方法返回值 绝对值 abs(a)int int绝对值 abs(a)long long绝对值 abs(a)float float绝对值 abs(a)double double public static int abs(inta)public static long abs(longa)p
23、ublic static float abs(floata)public static double abs(doublea),成员方法,40,方法的重写(overriding)子类重写父类的方法,成员方法,class Father void display();,class Son extends Father void display();,Father f=new Father();f.display();,Son s=new Son();s.display();,41,构造方法,创建对象/实例化对象new 例1:Apple a=new Apple();(创建对象)例2:Apple a;
24、(对象的说明)a=new Apple();(实例化对象)对象的实例化通过构造方法(constructor)来实现构造方法的名字与类名相同构造方法没有返回值构造方法可以有多个,构成方法的重载(overload),42,例:对象的实例化和初始化,输出结果:2020 5010 20,构造方法,43,方法的重载(overload),构造方法,class Tree int height;Tree()prt(“Planting a seeding”);height=0;Tree(int i)prt(“Creating new Tree that is”+i+“feet tall”);height=i;,v
25、oid info()prt(“Tree is”+height+“feet height”);void info(String s)prt(s+“:Tree is”+height+“feet height”);static void prt(String s)System.out.println(s);,for(int i=0;i 5;i+)Tree t=new Tree(i);t.info();t.info(“my tree”);new Tree();,44,默认构造方法例 class Apple int color;Apple a=new Apple();对象实例的判断:null例 Appl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 特征
链接地址:https://www.31ppt.com/p-5455971.html