java培训J2SE之面向对象编程课件_第1页
java培训J2SE之面向对象编程课件_第2页
java培训J2SE之面向对象编程课件_第3页
java培训J2SE之面向对象编程课件_第4页
java培训J2SE之面向对象编程课件_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

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

文档简介

J2SE之面向对象编程J2SE之面向对象编程编程语言的发展机器语言-直接由计算机的指令组成,指令、数据、地址都以“0”和“1”的符合串组成;可以被计算机直接执行。汇编语言-用容易理解和记忆的符号表示指令、数据以及寄存器等,抽象层次很低,程序员需要考虑大量的机器细节。高级语言-屏蔽了机器细节,提高了语言的抽象层次接近于人的自然语言,60年代出现的结构化编程语言提出了结构化数据和语句,数据和过程抽象等概念。面向对象的语言-与已往的各种语言的根本不同是,它的设计出发点就是为了更能直接的描述问题域中客观存在的事物。语言的发展是朝着人类更容易理解的方向前进编程语言的发展机器语言-直接由计算机的指令组成,指令、数据、2面向对象编程语言三大特征隐藏/封装继承多态面向对象编程语言三大特征隐藏/封装3面向过程的设计思想和面向对象的设计思想我要回老家面向过程我开车,我挂档,我踩油门,我过无锡,我过南京…面向对象我命令车去新疆车怎么去不关我事信息封装在车这个类的内部我不用去了解车整个开动的过程面向过程的设计思想和面向对象的设计思想我要回老家4面向对象的优点首先,面向对象符合人类看待事物的一般规律。对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节。注意区分:对象(本身)、对象的实现者、对象的调用者。分析对象主要从方法开始。我们通过类来看待对象,类是对象的抽象。面向对象的优点首先,面向对象符合人类看待事物的一般规律。5面向对象的优点其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。对象之间的耦合性一定要低(比如不同硬盘和不同主板之间的关系)。这样才能使每个对象本身做成最好的。对于对象的要求:高内聚、低耦合,这样容易拼装成为一个系统。实现高内聚就是要最大限度低提高复用性(复用性好是因为高内聚)。可复用性是OOP的基础。 对象的功能越简单,复用性就越好。(对象的耦合性弱,复用性就比较强)可扩展性系统的可插入性,是在系统中加入新的对象之后的系统稳定性。对象的可替换性,是在系统中替换原有的对象之后的系统的稳定性。面向对象的优点其次,采用面向对象方法可以使系统各部分各司其职6Java与面向对象对象是Java程序的核心,在Java程序中“万事万物皆对象”。类是用来创建同一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法。类可以看成是静态属性(成员变量)和动态属性(方法)的封装体。J2SDK提供了很多类供编程人员使用,编程人员也可定义自己的类。Java与面向对象对象是Java程序的核心,在Java程序中7为什么用对象?面向对象的编程—一组对象互相配合通过沟通完成特定功能所有的paradigm都是对现实问题的抽象汇编是对机器语言的抽象面向过程的语言是对汇编的抽象对象更加符合对于现实问题的抽象对象都有对外服务的接口通过继承可以复用对象隐藏内部服务的实现通过聚合可以复用面向对象更加容易使我们达到这些年来苦苦追求的境界Reusability、Extensibility、Maintainablity维护和替换更加方便、...组件—比对象更高的层次上的抽象(二进制级别)EJB、WebService、CORBA、COM、...为什么用对象?面向对象的编程—一组对象互相配合通过沟通完成特8Java类的定义,成员变量的声明,方法的声明用class关键字定义一个类,例如:

classPerson{

//成员变量定义

privateintid;

privateintage=20;

//方法定义

publicintgetAge(){returnage;}

publicvoidsetAge(inti){age=i;}

publicintgetId(){returnid;}

}类的定义主要由两方面组成成员变量和方法。声明成员变量的格式为:[<modifiers>]type<attr_name>[=defaultValue];

例如:privateintid;privateintage=20;声明方法的格式为:

[<modifiers>]<modifiers><return_type><name>([<argu_list>]){ [<statements>]}例如:publicintgetAge(){returnage;}Java类的定义,成员变量的声明,方法的声明用class9对象的创建和使用

必须使用new关键字创建对象。Personperson=new

Person();

使用对象(引用).成员变量来引用对象的成员变量。person.age

使用对象(引用).方法(参数列表)来调用对象的方法。person.setAge(23)

同一类的每个对象有不同的成员变量存储空间。同一类的每个对象共享该类的方法。对象的创建和使用必须使用new关键字创建对象。10构造方法使用new+构造方法创建一个新的对象。构造方法是定义在Java类中的一个用来初始化对象的方法。构造方法与类同名且没有返回值。例如:Person类的构造函数:publicclassPerson{ intid; intage; Person(intn,inti){ id=n; age=i; }}构造方法使用new+构造方法创建一个新的对象。pub11构造方法的调用创建对象时,使用构造方法初始化对象的成员变量。publicclassTest{publicstaticvoidmain(Stringargs[]){

Persontom=newPerson(1,25);Personjohn=newPerson(2,27);}}构造方法的调用创建对象时,使用构造方法初始化对象的成员变量。12构造方法的重载与普通方法一样,构造方法也可以重载:例如:修改Person类的构造方法为:Person(){id=0;age=20;}Person(inti){id=0;age=i;}Person(intn,inti){id=n;age=i;构造方法的重载与普通方法一样,构造方法也可以重载:Perso13默认的构造方法每个类都有构造方法如果程序员在定义类时没有定义构造方法的话,Java将自动为该类添加一个公开的空参空实现的构造方法。

如:publicPerson(){}默认的构造方法每个类都有构造方法14this关键字在类的方法定义中使用的this关键字代表使用该方法的对象的引用。当必须指出当前使用方法的对象是谁时要使用this。有时使用this可以处理方法中成员变量和参数重名的情况。

publicclassLeaf{inti=0;Leaf(inti){this.i=i;}Leafincreament(){i++;returnthis;}voidprint(){System.out.println("i="+i);}publicstaticvoidmain(String[]args){Leafleaf=newLeaf(100);leaf.increament().increament().print();}}this关键字在类的方法定义中使用的this关键字代表15package和import语句为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间。package和import语句为便于管理大型软件系统中16package和import语句package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。

它的格式为:packagepkg1[.pkg2[.pkg3…]];Java编译器把包对应于文件系统的目录管理,package语句中,用‘.’来指明包(目录)的层次,例如使用语句packagecom.ambow;则该文件中所以的类位于.\com\sxt目录下package和import语句package语句作为17package和import语句如果将一个类打包,则使用该类时,必须使用该类的全名(例如:com.ambow.MyClass),Java编译器才会在找到该类。可以不需要用import语句直接使用java.lang包中的类。也可以使用import在文件的开头引入要使用到的类;例如:importcom.ambow.MyClass;importjava.util.*;//引入java.util包中所有的类

.........MyClassmyClass=newMyClass();//可以直接使用类名

.........package和import语句如果将一个类打包,则使用18J2SDK中主要的包介绍java.lang-包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。java.awt-包含了构成抽象窗口工具集(abstractwindowtoolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。-包含执行与网络相关的操作的类。java.io-包含能提供多种输入/输出功能的类。java.util-包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。J2SDK中主要的包介绍java.lang-包含一些Jav19类的继承Inheritance是“isa”的关系声明的形式:publicclassManagerextendsEmployee{…}Java中使用extends关键字实现类的继承机制通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法)。Java是一个单一继承的语言---一个类只有一个直接父类,如果没有声明父类,则默认的父类为java.lang.ObjectJava只支持单继承,不允许多继承:一个子类只能有一个基类,一个基类可以派生出多个子类类的继承Inheritance是“isa”的关系20继承Inheritance构造方法不能被继承方法和属性可以被继承子类的构造方法隐含的调用父类的默认构造方法如果父类中没有默认的构造方法,则应该在子类的构造方法的第一行明确的声明调用父类中其他的构造方法。如下形式:

super(…)继承Inheritance构造方法不能被继承21super关键字在Java类中使用super来引用基类(父类)的成分;classFatherClass{publicintvalue;publicvoidf(){value=100;System.out.println("FatherClass.value="+value);}}classChildClassextendsFatherClass{publicintvalue;publicvoidf(){super.f();value=200;System.out.println("ChildClass.value="+value);System.out.println(value);System.out.println(super.value);}}super关键字在Java类中使用super来引用基类(父22super关键字super关键字的两种用法代表指向父类的引用:

super.agesuper.addAge()代表调用父类的构造方法super();super(“wangcai”,8);

super关键字super关键字的两种用法23继承中的构造方法子类的构造的过程中必须调用其基类的构造方法。子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。使用this(agumentlist)调用本类另外的构造方法如果用super,必须写在方法的第一句如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用基类无参数的构造方法。如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。继承中的构造方法子类的构造的过程中必须调用其基类的构造方法。24对象转型(casting)一个基类的引用类型变量可以“指向”其子类的对象。一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。可以使用引用变量instanceof类名来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)对象转型(casting)一个基类的引用类型变量可以“指向”25类型转换使用instanceof运算符确定对象的类型子类对象可以隐含扩展为父类型父类型必须明确声明转化为子类型不是所有的父类型对象都能转化为子类型类型转换使用instanceof运算符确定对象的类型26多态polymiorphism多态:

多态指的是编译时类型变化,而运行时类型不变。多态分两种:编译时多态:编译时动态重载.

运行时多态:指一个对象可以具有多个类型。多态polymiorphism多态:27多态polymiorphism运行时多态的三原则:(应用时为覆盖)对象不变;(改变的是主观认识)对于对象的调用只能限于编译时类型的方法,如调用运行时类型方法报错。在上面的例子中:Animala=newDog();对象a的编译时类型为Animal,运行时类型为dog。

注意:编译时类型一定要为运行时类型的父类(或者同类型)。对于语句:Dogd=(Dog)a。将d强制声明为a类型,此时d为Dog(),此时d就可以调用运行时类型。注意:a和d指向同一对象。在程序的运行时,动态类型判定。运行时调用运行时类型,即它调用覆盖后的方法。多态的存在要有3个必要条件:要有继承,要有重写,父类引用指向子类对象多态polymiorphism运行时多态的三原则:(应用时为28static关键字在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。可以通过对象引用或类名(不需要实例化)访问静态成员。this可以看作是一个类中的变量,它的值是当前对象的引用(staticclass)static关键字在类中,用static声明的成员变量为静29静态方法可以在没有任何实例时调用不能在static方法内部访问非static成员不能被非static方法覆盖静态方法可以在没有任何实例时调用30Final关键字final的成员变量的值不能够被改变final的方法不能够被重写final的类不能够被继承Final关键字final的成员变量的值不能够被改变31抽象类用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。如果重写不了,应该声明自己为抽象。抽象类不能被实例化不能生成对象。抽象方法只需声明,而不需实现。抽象类用abstract关键字来修饰一个类时,这个类叫做抽象32abstract类和abstract方法如果一个方法没有实现的代码,那么它必须被声明为抽象的方法。

publicabstractStringgetName();如果一个类包含有抽象方法,那么它必须被声明为抽象类。publicabstractclassAccount{publicabstractStringgetName();…}抽象类不能实例化----不能生成对象。可以定义一个抽象类的引用。

abstract类和abstract方法如果一个方法没有实现33接口接口(interface)是抽象方法和常量值的定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。接口定义举例:

publicinterfaceRunner{publicstaticfinalintid=1;publicvoidstart();publicvoidrun();publicvoidstop();}接口接口(interface)是抽象方法和常量值的定义的集34接口特性接口可以多重实现;接口中声明的属性默认为publicstaticfinal的;也只能是publicstaticfinal的;接口中只能定义抽象方法,而且这些方法默认为public的、也只能是public的;接口可以继承其它的接口,并添加新的属性和抽象方法。接口特性接口可以多重实现;35接口多个无关的类可以实现同一个接口。一个类可以实现多个无关的接口。与继承关系类似,接口与实现类之间存在多态性。定义Java类的语法格式:<modifier>class<name>[extends<superclass>] [implements<interface>[,<interface>]*]{ <declarations>* }接口多个无关的类可以实现同一个接口。36接口用法总结通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。(就像人拥有一项本领)通过接口可以指明多个类需要实现的方法。(描述这项本领的共同接口)通过接口可以了解对象的交互界面,而不需了解对象所对应的类。使用接口?还是抽象类?interface同时赋予了接口和抽象类的好处如果父类可以不带任何函数定义,或任何成员变量,那么优先使用接口。接口用法总结通过接口可以实现不相关类的相同行为,而不需要考虑37Object类Object类是所有Java类的根基类如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类

publicclassPerson{ ... }等价于:publicclassPersonextendsObject{ ...}Object类Object类是所有Java类的根基类38Object类的方法publicStringtoString():返回对象的字符串描述形式publicbooleanequals(Objecto):判断两个对象是否相等一般来说,我们会根据需要在自己写的类中覆盖这两个方法,给出自己的定义。Object类的方法publicStringtoSt39toString方法Object类中定义有publicStringtoString()方法,其返回值是String类型,描述当前对象的有关信息。在进行String与其它类型数据的连接操作时(如:System.out.println(“info”+person)),将自动调用该对象类的toString()方法可以根据需要在用户自定义类型中重写toString()方法。返回描述某个对象的字符串当直接输出一个对象时,这个方法被隐含的调用toString方法Object类中定义有publicSt40equals方法Object类中定义有:publicbooleanequals(Objectobj)方法提供定义对象是否“相等”的逻辑。Object的equals方法定义为:x.equals(y)当x和y是同一个对象的应用时返回true否则返回falseJ2SDK提供的一些类,如String,Date等,重写了Object的equals方法,调用这些类的equals方法,x.equals(y),当x和y所引用的对象是同一类对象且属性内容相等时(并不一定是相同对象),返回true否则返回false。可以根据需要在用户自定义类型中重写equals方法。equals方法Object类中定义有:41equals()方法==运算符用来判断两个引用值是否相等(是否指向同一个对象equals(Objecto)方法一般在定义类时被覆盖(改写),该方法用来判断两个对象值是否相同。packagesample;publicclassEqualTest{

publicstaticvoidmain(String[]args){Strings1=newString("Hello");Strings2=s1;Strings3=newString("Hello");System.out.println("s1==s2:"+(s1==s2));System.out.println("s1==s3:"+(s1==s3));System.out.println("s1.equals(s3):"+s1.equals(s3));Accounta=newAccount("george",100.00);Accountb=newAccount("george",100.00);System.out.println("a==b:"+(a==b));System.out.println("a.equals(b):"+a.equals(b));}}classAccount{privateStringname;privatedoublebalance;publicAccount(Stringname,doublebalance){=name;this.balance=balance;}publicbooleanequals(Objecto){Accounta=(Account)o;return(name.equals()&&(balance==a.balance));}}equals()方法==运算符用来判断两个引用值是否相等(42WrapperClassPrimitiveTypeWrapperClassbooleanBooleanbyteByteshortShortcharCharacterintIntegerlongLongfloatFloatdoubleDoubleWrapperClassPrimitiveTypeWra43演讲完毕,谢谢观看!演讲完毕,谢谢观看!44J2SE之面向对象编程J2SE之面向对象编程编程语言的发展机器语言-直接由计算机的指令组成,指令、数据、地址都以“0”和“1”的符合串组成;可以被计算机直接执行。汇编语言-用容易理解和记忆的符号表示指令、数据以及寄存器等,抽象层次很低,程序员需要考虑大量的机器细节。高级语言-屏蔽了机器细节,提高了语言的抽象层次接近于人的自然语言,60年代出现的结构化编程语言提出了结构化数据和语句,数据和过程抽象等概念。面向对象的语言-与已往的各种语言的根本不同是,它的设计出发点就是为了更能直接的描述问题域中客观存在的事物。语言的发展是朝着人类更容易理解的方向前进编程语言的发展机器语言-直接由计算机的指令组成,指令、数据、46面向对象编程语言三大特征隐藏/封装继承多态面向对象编程语言三大特征隐藏/封装47面向过程的设计思想和面向对象的设计思想我要回老家面向过程我开车,我挂档,我踩油门,我过无锡,我过南京…面向对象我命令车去新疆车怎么去不关我事信息封装在车这个类的内部我不用去了解车整个开动的过程面向过程的设计思想和面向对象的设计思想我要回老家48面向对象的优点首先,面向对象符合人类看待事物的一般规律。对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节。注意区分:对象(本身)、对象的实现者、对象的调用者。分析对象主要从方法开始。我们通过类来看待对象,类是对象的抽象。面向对象的优点首先,面向对象符合人类看待事物的一般规律。49面向对象的优点其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。对象之间的耦合性一定要低(比如不同硬盘和不同主板之间的关系)。这样才能使每个对象本身做成最好的。对于对象的要求:高内聚、低耦合,这样容易拼装成为一个系统。实现高内聚就是要最大限度低提高复用性(复用性好是因为高内聚)。可复用性是OOP的基础。 对象的功能越简单,复用性就越好。(对象的耦合性弱,复用性就比较强)可扩展性系统的可插入性,是在系统中加入新的对象之后的系统稳定性。对象的可替换性,是在系统中替换原有的对象之后的系统的稳定性。面向对象的优点其次,采用面向对象方法可以使系统各部分各司其职50Java与面向对象对象是Java程序的核心,在Java程序中“万事万物皆对象”。类是用来创建同一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法。类可以看成是静态属性(成员变量)和动态属性(方法)的封装体。J2SDK提供了很多类供编程人员使用,编程人员也可定义自己的类。Java与面向对象对象是Java程序的核心,在Java程序中51为什么用对象?面向对象的编程—一组对象互相配合通过沟通完成特定功能所有的paradigm都是对现实问题的抽象汇编是对机器语言的抽象面向过程的语言是对汇编的抽象对象更加符合对于现实问题的抽象对象都有对外服务的接口通过继承可以复用对象隐藏内部服务的实现通过聚合可以复用面向对象更加容易使我们达到这些年来苦苦追求的境界Reusability、Extensibility、Maintainablity维护和替换更加方便、...组件—比对象更高的层次上的抽象(二进制级别)EJB、WebService、CORBA、COM、...为什么用对象?面向对象的编程—一组对象互相配合通过沟通完成特52Java类的定义,成员变量的声明,方法的声明用class关键字定义一个类,例如:

classPerson{

//成员变量定义

privateintid;

privateintage=20;

//方法定义

publicintgetAge(){returnage;}

publicvoidsetAge(inti){age=i;}

publicintgetId(){returnid;}

}类的定义主要由两方面组成成员变量和方法。声明成员变量的格式为:[<modifiers>]type<attr_name>[=defaultValue];

例如:privateintid;privateintage=20;声明方法的格式为:

[<modifiers>]<modifiers><return_type><name>([<argu_list>]){ [<statements>]}例如:publicintgetAge(){returnage;}Java类的定义,成员变量的声明,方法的声明用class53对象的创建和使用

必须使用new关键字创建对象。Personperson=new

Person();

使用对象(引用).成员变量来引用对象的成员变量。person.age

使用对象(引用).方法(参数列表)来调用对象的方法。person.setAge(23)

同一类的每个对象有不同的成员变量存储空间。同一类的每个对象共享该类的方法。对象的创建和使用必须使用new关键字创建对象。54构造方法使用new+构造方法创建一个新的对象。构造方法是定义在Java类中的一个用来初始化对象的方法。构造方法与类同名且没有返回值。例如:Person类的构造函数:publicclassPerson{ intid; intage; Person(intn,inti){ id=n; age=i; }}构造方法使用new+构造方法创建一个新的对象。pub55构造方法的调用创建对象时,使用构造方法初始化对象的成员变量。publicclassTest{publicstaticvoidmain(Stringargs[]){

Persontom=newPerson(1,25);Personjohn=newPerson(2,27);}}构造方法的调用创建对象时,使用构造方法初始化对象的成员变量。56构造方法的重载与普通方法一样,构造方法也可以重载:例如:修改Person类的构造方法为:Person(){id=0;age=20;}Person(inti){id=0;age=i;}Person(intn,inti){id=n;age=i;构造方法的重载与普通方法一样,构造方法也可以重载:Perso57默认的构造方法每个类都有构造方法如果程序员在定义类时没有定义构造方法的话,Java将自动为该类添加一个公开的空参空实现的构造方法。

如:publicPerson(){}默认的构造方法每个类都有构造方法58this关键字在类的方法定义中使用的this关键字代表使用该方法的对象的引用。当必须指出当前使用方法的对象是谁时要使用this。有时使用this可以处理方法中成员变量和参数重名的情况。

publicclassLeaf{inti=0;Leaf(inti){this.i=i;}Leafincreament(){i++;returnthis;}voidprint(){System.out.println("i="+i);}publicstaticvoidmain(String[]args){Leafleaf=newLeaf(100);leaf.increament().increament().print();}}this关键字在类的方法定义中使用的this关键字代表59package和import语句为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间。package和import语句为便于管理大型软件系统中60package和import语句package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。

它的格式为:packagepkg1[.pkg2[.pkg3…]];Java编译器把包对应于文件系统的目录管理,package语句中,用‘.’来指明包(目录)的层次,例如使用语句packagecom.ambow;则该文件中所以的类位于.\com\sxt目录下package和import语句package语句作为61package和import语句如果将一个类打包,则使用该类时,必须使用该类的全名(例如:com.ambow.MyClass),Java编译器才会在找到该类。可以不需要用import语句直接使用java.lang包中的类。也可以使用import在文件的开头引入要使用到的类;例如:importcom.ambow.MyClass;importjava.util.*;//引入java.util包中所有的类

.........MyClassmyClass=newMyClass();//可以直接使用类名

.........package和import语句如果将一个类打包,则使用62J2SDK中主要的包介绍java.lang-包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。java.awt-包含了构成抽象窗口工具集(abstractwindowtoolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。-包含执行与网络相关的操作的类。java.io-包含能提供多种输入/输出功能的类。java.util-包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。J2SDK中主要的包介绍java.lang-包含一些Jav63类的继承Inheritance是“isa”的关系声明的形式:publicclassManagerextendsEmployee{…}Java中使用extends关键字实现类的继承机制通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法)。Java是一个单一继承的语言---一个类只有一个直接父类,如果没有声明父类,则默认的父类为java.lang.ObjectJava只支持单继承,不允许多继承:一个子类只能有一个基类,一个基类可以派生出多个子类类的继承Inheritance是“isa”的关系64继承Inheritance构造方法不能被继承方法和属性可以被继承子类的构造方法隐含的调用父类的默认构造方法如果父类中没有默认的构造方法,则应该在子类的构造方法的第一行明确的声明调用父类中其他的构造方法。如下形式:

super(…)继承Inheritance构造方法不能被继承65super关键字在Java类中使用super来引用基类(父类)的成分;classFatherClass{publicintvalue;publicvoidf(){value=100;System.out.println("FatherClass.value="+value);}}classChildClassextendsFatherClass{publicintvalue;publicvoidf(){super.f();value=200;System.out.println("ChildClass.value="+value);System.out.println(value);System.out.println(super.value);}}super关键字在Java类中使用super来引用基类(父66super关键字super关键字的两种用法代表指向父类的引用:

super.agesuper.addAge()代表调用父类的构造方法super();super(“wangcai”,8);

super关键字super关键字的两种用法67继承中的构造方法子类的构造的过程中必须调用其基类的构造方法。子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。使用this(agumentlist)调用本类另外的构造方法如果用super,必须写在方法的第一句如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用基类无参数的构造方法。如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错。继承中的构造方法子类的构造的过程中必须调用其基类的构造方法。68对象转型(casting)一个基类的引用类型变量可以“指向”其子类的对象。一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。可以使用引用变量instanceof类名来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)对象转型(casting)一个基类的引用类型变量可以“指向”69类型转换使用instanceof运算符确定对象的类型子类对象可以隐含扩展为父类型父类型必须明确声明转化为子类型不是所有的父类型对象都能转化为子类型类型转换使用instanceof运算符确定对象的类型70多态polymiorphism多态:

多态指的是编译时类型变化,而运行时类型不变。多态分两种:编译时多态:编译时动态重载.

运行时多态:指一个对象可以具有多个类型。多态polymiorphism多态:71多态polymiorphism运行时多态的三原则:(应用时为覆盖)对象不变;(改变的是主观认识)对于对象的调用只能限于编译时类型的方法,如调用运行时类型方法报错。在上面的例子中:Animala=newDog();对象a的编译时类型为Animal,运行时类型为dog。

注意:编译时类型一定要为运行时类型的父类(或者同类型)。对于语句:Dogd=(Dog)a。将d强制声明为a类型,此时d为Dog(),此时d就可以调用运行时类型。注意:a和d指向同一对象。在程序的运行时,动态类型判定。运行时调用运行时类型,即它调用覆盖后的方法。多态的存在要有3个必要条件:要有继承,要有重写,父类引用指向子类对象多态polymiorphism运行时多态的三原则:(应用时为72static关键字在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员。可以通过对象引用或类名(不需要实例化)访问静态成员。this可以看作是一个类中的变量,它的值是当前对象的引用(staticclass)static关键字在类中,用static声明的成员变量为静73静态方法可以在没有任何实例时调用不能在static方法内部访问非static成员不能被非static方法覆盖静态方法可以在没有任何实例时调用74Final关键字final的成员变量的值不能够被改变final的方法不能够被重写final的类不能够被继承Final关键字final的成员变量的值不能够被改变75抽象类用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。如果重写不了,应该声明自己为抽象。抽象类不能被实例化不能生成对象。抽象方法只需声明,而不需实现。抽象类用abstract关键字来修饰一个类时,这个类叫做抽象76abstract类和abstract方法如果一个方法没有实现的代码,那么它必须被声明为抽象的方法。

publicabstractStringgetName();如果一个类包含有抽象方法,那么它必须被声明为抽象类。publicabstractclassAccount{publicabstractStringgetName();…}抽象类不能实例化----不能生成对象。可以定义一个抽象类的引用。

abstract类和abstract方法如果一个方法没有实现77接口接口(interface)是抽象方法和常量值的定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。接口定义举例:

publicinterfaceRunner{publicstaticfinalintid=1;publicvoidstart();publicvoidrun();publicvoidstop();}接口接口(interface)是抽象方法和常量值的定义的集78接口特性接口可以多重实现;接口中声明的属性默认为publicstaticfinal的;也只能是publicstaticfinal的;接口中只能定义抽象方法,而且这些方法默认为public的、也只能是public的;接口可以继承其它的接口,并添加新的属性和抽象方法。接口特性接口可以多重实现;79接口多个无关的类可以实现同一个接口。一个类可以实现多个无关的接口。与继承关系类似,接口与实现类之间存在多态性。定义Java类的语法格式:<modifier>class<name>[extends<superclass>] [implements<interface>[,<interface>]*]{ <declarations>* }接口多个无关的类可以实现同一个接口。80接口用法总结通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。(就像人拥有一项本领)通过接口可以指明多个类需要实现的方法。(描述这项本领的共同接口)通过接口可以了解对象的交互界面,而不需了解对象所对应的类。使用接口?还是抽象类?interface同时赋予了接口和抽象类的好处如果父类可以不带任何函数定义,或任何成员变量,那么优先使用接口。接口用法总结通过接口可以实现不相关类的相同行为,而不需要考虑81Object类Object类是所有Java类的根基类如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类

publicclassPerson{ ... }等价于:publicclassPersonextendsObject{ .

温馨提示

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

评论

0/150

提交评论