java培训J2SE之面向对象编程

上传人:gb****c 文档编号:243129644 上传时间:2024-09-16 格式:PPT 页数:43 大小:112.50KB
返回 下载 相关 举报
java培训J2SE之面向对象编程_第1页
第1页 / 共43页
java培训J2SE之面向对象编程_第2页
第2页 / 共43页
java培训J2SE之面向对象编程_第3页
第3页 / 共43页
点击查看更多>>
资源描述
,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,*,J2SE,之 面向对象编程,1,编程语言的发展,机器语言直接由计算机的指令组成,指令、数据、地址都以“,0”,和“,1”,的符合串组成;可以被计算机直接执行。,汇编语言用容易理解和记忆的符号表示指令、数据以及寄存器等,抽象层次很低,程序员需要考虑大量的机器细节。,高级语言屏蔽了机器细节,提高了语言的抽象层次接近于人的自然语言,,60,年代出现的结构化编程语言提出了结构化数据和语句,数据和过程抽象等概念。,面向对象的语言与已往的各种语言的根本不同是,它的设计出发点就是为了更能直接的描述问题域中客观存在的事物。,语言的发展是朝着人类更容易理解的方向前进,2,面向对象编程语言三大特征,隐藏,/,封装,继承,多态,3,面向过程的设计思想和面向对象的设计思想,我要回老家,面向过程,我开车,我挂档,我踩油门,我过无锡,我过南京,面向对象,我命令车去新疆,车怎么去不关我事,信息封装在车这个类的内部,我不用去了解车整个开动的过程,4,面向对象的优点,首先,面向对象符合人类看待事物的一般规律。,对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节。,注意区分:对象(本身)、对象的实现者、对象的调用者。,分析对象主要从方法开始。,我们通过类来看待对象,类是对象的抽象。,5,面向对象的优点,其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。,对象之间的耦合性一定要低(比如不同硬盘和不同主板之间的关系)。这样才能使每个对象本身做成最好的。,对于对象的要求:高内聚、低耦合,这样容易拼装成为一个系统。,实现高内聚就是要最大限度低提高复用性(复用性好是因为高内聚)。,可复用性是,OOP,的基础。,对象的功能越简单,复用性就越好。(对象的耦合性弱,复用性就比较强),可扩展性,系统的可插入性,是在系统中加入新的对象之后的系统稳定性。,对象的可替换性,是在系统中替换原有的对象之后的系统的稳定性。,6,Java,与面向对象,对象是,Java,程序的核心,在,Java,程序中“万事万物皆对象”。,类是用来创建同一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法。,类可以看成是静态属性(成员变量)和动态属性(方法)的封装体。,J2SDK,提供了很多类供编程人员使用,编程人员也可定义自己的类。,7,为什么用对象?,面向对象的编程,一组对象互相,配合,通过,沟通,完成特定功能,所有的,paradigm,都是对现实问题的抽象,汇编是对机器语言的抽象,面向过程的语言是对汇编的抽象,对象更加符合对于现实问题的抽象,对象都有对外服务的接口,通过继承可以复用,对象隐藏内部服务的实现,通过聚合可以复用,面向对象更加容易使我们达到这些年来苦苦追求的境界,Reusability,、,Extensibility,、,Maintainablity,维护和替换更加方便、,.,组件,比对象更高的层次上的抽象(二进制级别),EJB,、,Web Service,、,CORBA,、,COM,、,.,8,Java,类的定义,成员变量的声明,方法的声明,用,class,关键字定义一个类,例如:,class Person ,/,成员变量定义,private int id; private int age = 20;,/,方法定义,public int getAge() return age; public void setAge(int i) age = i; public int getId() return id;,类的定义主要由两方面组成,成员变量,和,方法,。,声明成员变量,的格式为:, type =defaultValue ;,例如:,private int id; private int age = 20;,声明方,法的格式为:, () ,例如:,public int getAge() return age;,9,对象的创建和使用,必须使用,new,关键字创建对象。,Person,p,erson,=,new,Person,();,使用对象(引用),.,成员变量来引用对象的成员变量。,person.age,使用对象(引用),.,方法(参数列表)来调用对象的方法。,person.,setAge(23),同一类的每个对象有不同的成员变量存储空间。,同一类的每个对象共享该类的方法。,10,构造方法,使用,new +,构造方法 创建一个新的对象。,构造方法是定义在,Java,类中的一个用来初始化对象的方法。,构造方法与类同名且没有返回值。,例如:,Person,类的构造函数:,public class Person ,int id;,int age;,Person(int n,int i),id = n;,age = i;,11,构造方法的调用,创建对象时,使用构造方法初始化对象的成员变量。,public class Test ,public static void main(String args) ,Person tom = new Person(1,25);,Person john = new Person(2,27);,12,构造方法的重载,与普通方法一样,构造方法也可以重载:,例如:修改,Person,类的构造方法为:,Person() ,id = 0;,age = 20;,Person(int i) ,id = 0;,age = i;,Person(int n,int i),id = n;,age = i;,13,默认的构造方法,每个类都有构造方法,如果程序员在定义类时没有定义构造方法的话,,Java,将自动为该类添加一个公开的空参空实现的构造方法。,如:,public Person () ,14,this,关键字,在类的方法定义中使用的,this,关键字代表,使用该方法的对象,的引用。,当必须指出当前使用方法的对象是谁时要使用,this,。,有时使用,this,可以处理方法中成员变量和参数重名的情况。,public class Leaf,int i = 0;,Leaf(int i) this.i = i; ,Leaf increament(),i+;,return this;,void print() System.out.println(i = +i); ,public static void main(String args),Leaf leaf = new Leaf(100);,leaf.increament().increament().print();,15,package,和,import,语句,为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,,Java,引入包(,package,)机制,提供类的多重类命名空间。,16,package,和,import,语句,package,语句作为,Java,源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。它的格式为:,package pkg1.pkg2.pkg3;,Java,编译器把包对应于文件系统的目录管理,,package,语句中,用,.,来指明包,(,目录,),的层次,例如使用语句,package com.ambow;,则该文件中所以的类位于,. comsxt,目录下,17,package,和,import,语句,如果将一个类打包,则使用该类时,必须使用该类的全名(例如:,com.ambow.MyClass,),,Java,编译器才会在找到该类。,可以不需要用,import,语句直接使用,java.lang,包中的类。,也可以使用,import,在文件的开头引入要使用到的类;例如:,import,com.ambow.MyClass,;,import java.util.*;/,引入,java.util,包中所有的类,. . .,MyClass myClass = new MyClass(); /,可以直接使用类名,. . .,18,J2SDK,中主要的包介绍,java.lang,包含一些,Java,语言的核心类,如,String,、,Math,、,Integer,、,System,和,Thread,,提供常用功能。,java.awt,包含了构成抽象窗口工具集(,abstract window toolkits,)的多个类,这些类被用来构建和管理应用程序的图形用户界面,(GUI),。,包含执行与网络相关的操作的类。,java.io,包含能提供多种输入,/,输出功能的类。,java.util,包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。,19,类的,继承,Inheritance,是“,is a”,的关系,声明的形式:,public class Manager extends Employee ,Java,中使用,extends,关键字实现类的继承机制,通过继承,子类自动拥有了基类(,superclass,)的所有成员(成员变量和方法)。,Java,是一个单一继承的语言,-,一个类只有一个直接父类,如果没有声明父类,则默认的父类为,java.lang.Object,Java,只支持单继承,不允许多继承:,一个子类只能有一个基类,一个基类可以派生出多个子类,20,继承,Inheritance,构造方法不能被继承,方法和属性可以被继承,子类的构造方法隐含的调用父类的默认构造方法,如果父类中没有默认的构造方法,则应该在子类的构造方法的第一行明确的声明调用父类中其他的构造方法。如下形式:,super(),21,super,关键字,在,Java,类中使用,super,来引用基类(父类)的成分;,class FatherClass ,public int value;,public void f(),value = 100;,System.out.println,(FatherClass.value=+value);,class ChildClass extends FatherClass ,public int value;,public void f() ,super.f();,value = 200;,System.out.println,(ChildClass.value=+value);,System.out.println(value);,System.out.println(super.value);,22,super,关键字,super,关键字的两种用法,代表指向父类的引用:,super.age,super.addAge(),代表调用父类的构造方法,super();,super(“wangcai”,8);,23,继承中的构造方法,子类的构造的过程中,必须,调用其基类的构造方法。,子类可以在自己的构造方法中使用,super,(argument_list),调用基类的构造方法。,使用,this(agument list),调用本类另外的构造方法,如果用,super,必须写在方法的第一句,如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用基类无参数的构造方法。,如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。,24,对象转型(,casting,),一个基类的引用类型变量可以“指向”其子类的对象。,一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。,可以使用 引用 变量,instanceof,类名 来,判断该引用型变量,所“指向”的对象,是否属于该类或该类的子类。,子类的对象可以当作基类的对象来使用称作向上转型(,upcasting,),反之称为向下转型(,downcasting,),25,类型转换,使用,instanceof,运算符确定对象的类型,子类对象可以隐含扩展为父类型,父类型必须明确声明转化为子类型,不是所有的父类型对象都能转化为子类型,26,多态,polymiorphism,多态:,多态指的是编译时类型变化,而运行时类型不变。,多态分两种:,编译时多态:,编译时动态重载,.,运行时多态:,指一个对象可以具有多个类型。,27,多态,polymiorphism,运行时多态的三原则:(应用时为覆盖),对象不变;(改变的是主观认识),对于对象的调用只能限于编译时类型的方法,如调用运行时类型方法报错。,在上面的例子中:,Animal a=new Dog(),;对象,a,的编译时类型为,Animal,,运行时类型为,dog,。,注意:编译时类型一定要为运行时类型的父类(或者同类型)。,对于语句:,Dog d=(Dog)a,。将,d,强制声明为,a,类型,此时,d,为,Dog(),,此时,d,就可以调用运行时类型。注意:,a,和,d,指向同一对象。,在程序的运行时,动态类型判定。运行时调用运行时类型,即它调用覆盖后的方法。,多态的存在要有,3,个必要条件:,要有继承,要有重写,父类引用指向子类对象,28,static,关键字,在类中,用,static,声明的,成员变量,为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,,static,成员变量只有一份。,用,static,声明的方法为,静态方法,,在调用该方法时,不会将对象的引用传递给它,所以在,static,方法中不可访问非,static,的成员。,可以通过对象引用或类名(不需要实例化)访问静态成员。,this,可以看作是一个类中的变量,它的值是当前对象的引用,(static class),29,静态方法,可以在没有任何实例时调用,不能在,static,方法内部访问非,static,成员,不能被非,static,方法覆盖,30,Final,关键字,final,的成员变量的值不能够被改变,final,的方法不能够被重写,final,的类不能够被继承,31,抽象类,用,abstract,关键字来修饰一个类时,这个类叫做抽象类;,用,abstract,来修饰一个方法时,该方法叫做抽象方法。,含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。如果重写不了,应该声明自己为抽象。,抽象类不能被实例化,不能生成对象,。,抽象方法只需声明,而不需实现。,32,abstract,类和,abstract,方法,如果一个方法没有实现的代码,那么它必须被声明为抽象的方法。,public abstract String getName(),;,如果一个类包含有抽象方法,那么它必须被声明为抽象类。,public abstract class Account,public abstract String getName();,抽象类不能实例化,-,不能生成对象。,可以定义一个抽象类的引用。,33,接 口,接口(,interface,)是抽象方法和常量值的定义的集合。,从本质上讲,,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。,接口定义举例:,public interface Runner ,public static final int id = 1;,public void start();,public void run();,public void stop();,34,接口特性,接口可以多重实现;,接口中声明的属性默认为,public static final,的;也只能是,public static final,的;,接口中只能定义抽象方法,而且这些方法默认为,public,的、也只能是,public,的;,接口可以继承其它的接口,并添加新的属性和抽象方法。,35,接 口,多个无关的类可以实现同一个接口。,一个类可以实现多个无关的接口。,与继承关系类似,接口与实现类之间存在多态性。,定义,Java,类的语法格式:, class extends ,implements ,* ,*,36,接口用法总结,通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。,(,就像人拥有一项本领,),通过接口可以指明多个类需要实现的方法。(,描述这项本领的共同接口,),通过接口可以了解对象的交互界面,而不需了解对象所对应的类。,使用接口?还是抽象类?,interface,同时赋予了接口和抽象类的好处,如果父类可以不带任何函数定义,或任何成员变量,那么优先使用接口。,37,Object,类,Object,类是所有,Java,类的,根基类,如果在类的声明中未使用,extends,关键字指明其基类,则,默认基类为,Object,类,public class Person ,.,等价于:,public class Person extends Object ,.,38,Object,类的方法,public String toString(),:,返回对象的字符串描述形式,public boolean equals(Object o),:,判断两个对象是否相等,一般来说,我们会根据需要在自己写的类中覆盖这两个方法,,给出自己的定义。,39,toString,方法,Object,类中定义有,public String toString(),方法,其返回值是,String,类型,描述当前对象的有关信息。,在进行,String,与其它类型数据的连接操作时(如:,System.out.println(“info”+person,),将自动调用该对象类的,toString(),方法,可以根据需要在用户自定义类型中重写,toString(),方法。,返回描述某个对象的字符串,当直接输出一个对象时,这个方法被隐含的调用,40,equals,方法,Object,类中定义有:,public boolean equals(Object obj),方法,提供定义对象是否“相等”的逻辑,。,Object,的,equals,方法 定义为:,x.equals ( y ),当,x,和,y,是同一个对象的应用时返回,true,否则返回,false,J2SDK,提供的一些类,如,String,,,Date,等,重写了,Object,的,equals,方法,调用这些类的,equals,方法,,x.equals (y) ,当,x,和,y,所引用的对象是同一类对象且属性内容相等时(并不一定是相同对象),返回,true,否则返回,false,。,可以根据需要在用户自定义类型中重写,equals,方法,。,41,equals(),方法,=,运算符用来判断两个引用值是否相等(是否指向同一个对象,equals(Object o),方法一般在定义类时被覆盖(改写),该方法用来判断两个对象值是否相同。,package sample;,public class EqualTest ,public static void main(String args) ,String s1 = new String(Hello);,String s2 = s1;,String s3 = new String(Hello);,System.out.println(s1 = s2: + (s1=s2);,System.out.println(s1 = s3: + (s1=s3);,System.out.println(s1.equals(s3):, + s1.equals(s3);,Account a = new Account(george, 100.00);,Account b = new Account(george, 100.00);,System.out.println(a = b: + (a=b);,System.out.println(a.equals(b): + a.equals(b);,class Account ,private String name;,private double balance;,public Account(String name, double balance) ,this.name = name;,this.balance = balance;,public boolean equals(Object o) ,Account a = (Account)o;,return (name.equals(a.name) &,(balance = a.balance);,42,Wrapper Class,Primitive Type,Wrapper Class,boolean,Boolean,byte,Byte,short,Short,char,Character,int,Integer,long,Long,float,Float,double,Double,43,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!