欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    面向对象特征g.ppt

    • 资源ID:5455971       资源大小:948.04KB        全文页数:126页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    面向对象特征g.ppt

    1,Java语言程序设计,刘玉江,2,第三章 面向对象特征,授课内容:基本概念类的定义对象类的继承和多态接口和包常用工具类,3,基本概念,什么是编程语言?人和计算机进行交流的工具和手段编程语言的发展机器语言:0101001汇编语言:mov第三代语言:高级语言,以C语言为代表,过程式编程语言第四代语言:非过程化/面向对象的编程语言,4,面向对象面向对象编程(Object Oriented Programming-OOP)面向对象是一种软件开发的方法,“面向对象的分析与设计”第一个面向对象的语言:Simula-67第一个成功的面向对象编程语言:SmalltalkC+,JAVA,C#,PERL等用客观世界中描述事物的方法来描述程序中要解决的问题万事万物都是对象程序便是成堆的对象,彼此通过消息的传递,请求其他对象进行工作,基本概念,5,五个基本概念对象类封装性继承性多态性,基本概念,6,对象(object)对象包含两个特性状态:指对象本身的信息(内部信息/内部变量)行为:实现对信息的访问/对象的操作标志:代表对象的标识符山地车的状态(两个车轮、一些齿轮、速度、挡数),行为(刹车、加速、减速和换挡)书包含很多信息,拥有访问所包含信息的方法,一页一页的看,通过目录找到感兴趣的内容,基本概念,7,对象(object)状态变量(variables)行为方法(method)对象就是变量和相关方法的软件集合一个对象可以由其他对象组合而成,窗口(按钮,菜单条,文本框,状态栏等)程序就是对象的集合,对象之间相互交互和通信完成任务搭积木,基本概念,8,类(class)现实世界中,存在很多同类的对象,很多桌子、书、自行车一种原型,一种抽象,一种共性,一个模板实例,某类对象的一个特定实体,类是对象的一个抽象,基本概念,9,封装性模块化-每个对象的源文件可以是相互独立的,可以被不同的程序调用,每个对象是一块积木,可以搭建不同的形状信息隐藏-通常定义一个公共接口/方法实现对对象的访问,可以调整对象的私有信息和方法,而不会对其他调用它的对象产生影响可重用性,基本概念,10,继承性,运输工具,航空运输工具,陆地运输工具,水上运输工具,人力驱动,引擎驱动,二轮,四轮,客运,货运,基本概念,11,继承性多重继承,类A,类B,类C,类D,类F,类G,一个类拥有多个父类产生二义性,例类C和类D都有一个同名的方法,类G?Java中仅仅支持单一继承,同时Java采用Interface(接口)实现多重继承而避免父类二义性,基本概念,12,多态性表现在继承中方法的重写子类从父类继承(extends扩展)而来多个子类同属一个父类,所有子类有相同的父类继承父类的方法在不同的子类中有不同的表现形式表现在用一个类中方法的重载,基本概念,13,多态性多态性在继承中的表现,基本概念,14,多态性,class Square 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 draw()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)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文档中描述程序员可以对其进行调用j2sdk1.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:宣布该类不能有子类,类的描述,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;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;,类的描述,21,包(Package)的概念package org.jalpha;class test 源文件位置:“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”,类的描述,22,包(Package)的概念通过包来管理类名空间防止同名类名的冲突层次化的结构,类的描述,对个体(个人和机构)将类文件放在不同的目录下防止重名orgjalphamethod1*.java method2*.java,ABC 公司Engine.java,XYZ 公司Engine.java,需调用Engine.java?,ABC 公司comabcEngine.java,XYZ 公司comxyzEngine.java,23,包(Package)的概念package org.jalpha;class test,类的描述,D:srcorgjalphatest.javaD:srcorgjalphatest1.javaD:srcorgjalphatest2.java,24,对象具有状态和行为成员变量定义访问权限修饰符 类型 变量名;访问权限修饰符 类型 变量名=初值;成员方法定义访问权限修饰符 方法返回类型 方法名()throws 异常名 方法体;类型:基本类型,复合类型(数组、类和接口),类成员-变量和方法,25,访问控制修饰符公共访问控制符public 被所有类访问默认访问控制符被同一包中其他类访问私有访问控制符 private被该类自身访问保护访问控制符 protected该类自身、同一个包中的其他类、其他包中的子类访问私有保护访问控制符private protected该类自身、所有子类访问,类成员变量的访问,26,非访问控制修符静态变量static属于类的变量最终变量final值在程序的执行过程中不会改变易失变量volatile可能同时被多个线程所控制和修改,类成员变量的访问,27,public(公共变量/公共方法)容许全权访问,无任何限制(先构造对象,再访问),类成员的访问,class A public int x;public void print()class B void test()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 access 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 abc;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();,package 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=“+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(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 AVOGADRO=6.022e23;final类:不能有子类final方法:方法不能被重写(overriding)class ChessAlgorithm.final void nextMove(ChessPiece pieceMoved,BoardLocation newLocation).,类成员变量,35,非访问控制修符静态方法static属于类的方法最终方法final不能被子类重新定义的方法抽象方法abstract只有方法说明,没有具体实现本地方法native以其他语言实现方法功能同步方法synchronized用于多线程程序中的协调和同步,类成员方法的访问,36,例,成员方法,class 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:java 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)public 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;(对象的说明)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;,void 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例 Apple a;if(a=null)System.out.println(“Day dream”);,构造方法,运行时系统自动赋予一个空构造函数如 Apple(),45,构造方法,构造方法,class Cmethod Cmethod(boolean b)public static void main(String args)Cmethod c1=new Cmethod();Cmethod c2=new Cmethod(false);,class Cmethod Cmethod(boolean b)public static void main(String args)/Cmethod c1=new Cmethod();Cmethod c2=new Cmethod(false);,class Cmethod Cmethod(boolean b)Cmethod()public static void main(String args)Cmethod c1=new Cmethod();Cmethod c2=new Cmethod(false);,运行时系统自动赋予一个空构造方法,仅仅当该类没定义构造方法的情况下,46,抽象类(abstract class),一个未完成的类仅仅抽象类可以包含抽象方法(abstract methods)抽象方法:仅仅申明了方法,但未实现有访问修饰词返回值类型方法名参数列表无方法体,47,抽象类(abstract class),abstract class Point int x=1,y=1;void move(int dx,int dy)x+=dx;y+=dy;alert();abstract void alert();,abstract class ColoredPoint extends Point int color;,class SimplePoint extends Point void alert(),抽象方法:有访问修饰词、返回值类型、方法名和参数列表,无方法体,48,抽象类(abstract class),抽象类不能被实例化,例Point p=new Point();子类继承抽象类时,必须重写抽象方法,否则仍为抽象类,abstract class Point int x=1,y=1;void move(int dx,int dy)x+=dx;y+=dy;alert();abstract void alert();,abstract class ColoredPoint extends Point int color;,class SimplePoint extends Point void alert(),Point p=new SimplePoint();,49,位置70,位置100,50,对象,引用对象的变量格式:对象名.变量名引用对象的方法格式:对象名.方法名例1Vector v=new Vector();v.addElement(“hello world”);例2int a=1,2,3,4,5;int size=a.length;例3System.out.println();,51,对象的释放,将对象从内存中清除内存的管理(枯燥、容易出错)垃圾回收(Garbage Collection)垃圾搜集器(Garbage Collector)周期性地释放不再被引用的对象,自动完成手动完成,System.gc();public static void gc()-Runs the garbage collector.,52,例 对象用作方法的参数,对象的使用,53,第三章 面向对象特征,基本概念类的定义对象类的继承和多态接口和包常用工具类,54,类的继承,父类与子类的关系(extends)基本内容子类可调用父类的方法和变量,子类可增加父类中没有的方法和变量子类可重新定义父类的静态/实例变量子类可重新定义父类的静态/实例方法继承中的构造方法类成员访问修饰符与继承的关系,55,类的继承,子类可调用父类的方法和变量子类可增加父类中没有的方法和变量,class Vehicle String brand;void setB(String s)brand=s;void showB()System.out.println(brand);,class Bus extends Vehicle int gas;void setG(int g)gas=g;void showG()System.out.println(gas);,Bus b=new Bus();b.setB(“audi”);/*b.setG(100);b.showB();/*b.showG();,子类继承父类的方法和变量,则这些方法和变量就属于子类,则子类对象对这些方法和变量的调用是显而易见的,56,继承性是软件复用的一种形式。目的:是为了在创建新类时,可以保留现有类的属性和方法,并能新增,这样就可以充分利用现有资源,减少java程序中的重复代码。,一、类的继承性,继承性是面向对象程序设计语言的最主要的特点,是其他语言(如面向过程语言)所没有的。,57,与现实世界的遗传关系类似,父类和子类,孩子,父亲,继承,父类的属性和方法,新类,现有类,继承,继承的内容:,父亲的外貌和性格等,58,继承中的super对象,类的继承,父类,子类,调用父类的变量和方法,调用子类的变量和方法,59,1、实现继承的方法,Java类的继承关系图:,object,B类,A类,C类,B1类,B2类,B11类,60,举例:新类B,i and j:10 20i and j:7 8k:9i+j+k:24,class Aint i,j;void showij()System.out.println(i and j:+i+j);,61,2、成员变量的隐藏,隐藏:是指在子类中重新定义的父类的同名变量,int i,j;,62,3、成员方法的覆盖,覆盖:是指在子类中重新定义的父类的同名方法,void showij()System.out.println(“覆盖了父类的成员方法”);,63,4、super(父类)和this(子类),在需要给从父类继承的成员方法添加功能时,要使用supper,void showij()super.showij();System.out.println(“添加了新的成员方法”);,64,在子类隐藏了父类的变量时,要用this区分该同名变量的归属,int i,j;,i and j:10 20i and j:0 0k:9i+j+k:24,65,super()和this(),super()可以用来调用父类的构造方法,this()可以用来调用子类的构造方法,注意:1、构造方法与类同名,因此继承构造方法是没有意义的;2、super()和this()只能在当前子类中使用,作用是调用构造方法:,66,类的多态,class Intsortpublic String sort(int a,int b)/定义两个数排序的方法 if(ab)return a+”+b;else return b+”+a;public String sort(int a,int b,int c)/定义三个数排序的方法 int swap;if(ab)swap=a;a=b;b=swap;if(ac)swap=a;a=c;c=swap;if(bc)swap=b;b=c;c=swap;return a+”+b+”+c;,67,第三章 面向对象特征,基本概念类的定义对象类的继承和多态接口和包常用工具类,68,接口是对abstract类的进一步扩展接口中的方法都是未实现的(类似于抽象方法),目的是在实现接口的类之间建立一种协议接口中的变量都是常量定义一个类符合某个或一组接口,利用implements,接口(interface),public interface 接口名 成员变量;方法声明;,class 类名 implements 接口1,接口2,69,接口名修饰public:无任何访问限制无修饰:仅限于本包中接口变量默认都是“public static final”,接口(interface),70,Java程序中把一些常用的常量和方法(无方法体)放在一起,提供给包中所有类使用,称作接口。目的:实现多重继承,接口(interface),1、系统类接口2、自定义接口,public class Max extends Applet implements ActionListener,interface N1class c1 implements N1,71,import java.awt.*;import java.awt.event.*;import java.applet.Applet;public class M extends Applet implements MouseListener,MouseMotionListener int x1,y1,x2,y2;public void init()addMouseListener(this);addMouseMotionListener(this);public void paint(Graphics g)g.drawLine(x1,y1,x2,y2);g.drawString(x1:+x1+y1:+y1+x2:+x2+y2:+y2,50,50);public void mousePressed(MouseEvent e)x1=e.getX();y1=e.getY();public void mouseClicked(MouseEvent e)public void mouseExited(MouseEvent e)public void mouseEntered(MouseEvent e)public void mouseReleased(MouseEvent e)public void mouseDragged(MouseEvent e)x2=e.getX();y2=e.getY();repaint();public void mouseMoved(MouseEvent e),1、系统类接口,72,2、自定义接口,(1)创建格式:修饰符 interface N1,例6.4_1:interface N1 int year=2006;/year默认为static final常量 int age();/无方法体,在使用时需加入方法体 void output();,(2)接口继承:单继承和多继承,73,public class M implements N1 String xm;int sr;M(String a,int b)xm=a;sr=b;public int age()return year-sr;public void output()System.out.println(xm+的年龄为:+this.age();public static void main(String aa)M a=new M(张弛,1988);a.output();,例:,74,1、接口的单继承,例:interface Avoid F1();interface B extends A void F2();class M1 implements B/引用接口B void F1()void F2(),75,例:interface Avoid F1();interface Cvoid F3();interface B extends A,C void F2();class M1 implements B/引用接口B void F1()void F2()void F3(),2、接口的多继承,76,为什么需要包?使Java类更容易发现和使用防止命名冲突进行访问控制 层次结构,特定的功能A package is a collection of related classes and interfaces providing access protection and namespace management.import,包(package),77,Java允许把多个类收集在一起成为一组,称作包(package)。目的:组织类的存放位置,一、包(类的容器,由类和接口组成),比喻:windows文件存放方式,78,包和文件夹,P1,P2,包,79,P1Class1_1 Class1_n interface1Class2_1 Class2_n interface2,包的组成:,包由类和接口组成:,例:package p1;class Aclass B implements Cinterface C,80,1、java系统包,由java系统提供,又称API(Application program interface),特点:系统包以“java.”开头,有固定的功能,用户不能修改,只能使用。,81,Java常用包,82,83,2、包的引用,(1)导入包语句,与变量使用前一样,包在使用前也有声明(引入)。,例:import java.awt.*;import java.lang;(默认,可省),(2)包的路径(见下页),设置系统环境变量:Classpath值:;c:j2sdk1.4.1lib;f:P1,用户当前运行目录,系统类库API目录,用户自定义目录,84,(2)包的路径(classpath),P1,P2,包,F:cxtxt123.txt,Windows文件和Java类在使用时的对比:,java.applet.Applet,java.applet.*,具体类,85,3.自定义包,(1)创建自定义包:package;注意:该语句写在程序第一行,每个程序只能有一句,若没有包语句则为默认包,(2)设置包路径(classpath)程序编译后,你可以像引用系统类那样来引用自定义类。,(3)包引用格式:import;如没有包引用语句,则为引用默认包(import java.lang;),86,例:package P1;/程序包语句 import java.awt.*;/包引入语句 public class Class1 implements A/类定义 class Class2/类定义 interface A/接口的定义,package P2;import P1.*;class Class3,保存为Class1.java,保存为Class3.java,保存路径为f:cx,87,程序调试过程:,1、保存:f:cxClass1.java2、编译:javac d Class1.java编译结果:f:cxP1 Class1.class Class2.class A.class3、运行:java P1.Class1,88,第三章 面向对象特征,基本概念类的定义对象类的继承和多态接口和包常用工具类,89,常用工具类,Java 2 Platform PackagesJavaTM 2 Platform,Standard Edition,v 1.4.1 API SpecificationJava语言基础类、Java类库定义描述见Java2SDK文档135个包(package)java.applet;java.awt;java.awt.eventjava.io;java.lang;java.sql;java.text;java.utiljavax.swing 2723个类(class)和接口(interface)实现d:j2sdk1.4.1_01jrelibrt.jar(22.4MB)jar tvf rt.jar|more,90,常用工具类,java.lang包Object类System类Math类基本数据类型的包装类字符串操作类String类StringBuffer类StringTokenizer类(java.util包)Runtime类,91,java.lang.Object类,Class Object is the root of the class hierarchy.Every class has Object as a superclass.All objects,including arrays,implement the methods of this class.子类可以对Object类的方法进行重写,构造方法-public Object(),实例方法protected Object clone()throws CloneNotSupportedExceptionpublic boolean equals(Object obj)protected void finalize()throws Throwablepublic final Class getClass()public int hashCode()public final void notify()public final void notifyAll()public String toString()public final void wait()throws InterruptedExceptionpublic final void wait(long timeout)throws InterruptedExceptionpublic final void wait(long timeout,int nanos)throws InterruptedException,92,java.lang.System类,静态变量public static final InputStream in(标准输入流)public static final PrintStream out(标准输出流)public static final PrintStream err(标准错误输出流)静态方法public static void arraycopy(Object sr

    注意事项

    本文(面向对象特征g.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开