Java技术及应用第三讲1面向对象技术.ppt
LOGO第第3章章Java面向对象初步面向对象初步广东工业大学计算机学院广东工业大学计算机学院本章学习目标本章学习目标v类类v修饰符修饰符v包包v多态多态v本章补充阅读材料本章补充阅读材料2广东工业大学计算机学院广东工业大学计算机学院面向对象整体概念图面向对象整体概念图3广东工业大学计算机学院广东工业大学计算机学院面向对象几个概念面向对象几个概念v类类:是既包括数据又包括作用于数据的一组操作的封装体。类:是既包括数据又包括作用于数据的一组操作的封装体。类中的数据称为中的数据称为成员变量成员变量,类中对数据的操作称为,类中对数据的操作称为成员方法成员方法。v对象对象:对象是类的实例。对象是动态的,有自己的生存周期。:对象是类的实例。对象是动态的,有自己的生存周期。v封装封装性:为类的成员提供公有、缺省、保护和私有等多级访问性:为类的成员提供公有、缺省、保护和私有等多级访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。权限,目的是隐藏类中的私有变量和类中方法的实现细节。v继承性继承性:提供从已存在的类创建新类的机制,继承使一个新类:提供从已存在的类创建新类的机制,继承使一个新类自动拥有被继承类的全部成员。自动拥有被继承类的全部成员。一个类只有一个直接父类称为一个类只有一个直接父类称为单重继承单重继承,如果一个类拥有多个直接父类称为,如果一个类拥有多个直接父类称为多重继承多重继承。v多态性多态性:提供类中方法执行的多样性。有两种表现形式:重载:提供类中方法执行的多样性。有两种表现形式:重载和覆盖。和覆盖。4广东工业大学计算机学院广东工业大学计算机学院3.1类类类的相关概念类是抽象数据类型的具体实现,是具有相同属性和相同操作功能的对象的集合。对象是类的实例,两者之间的关系相当于一般程序设计语言中变量和变量类型的关系。在类中,数据或变量被称为成员变量,定义在类中的方法和成员变量统称为类的成员。在大多数类中,成员变量通过定义在该类中的方法来操作和存取,方法决定该类中的数据如何使用。(封装)5广东工业大学计算机学院广东工业大学计算机学院3.1类类vJava中的类在Java程序中,类是由定义和主体构成的右图是Java中一个完整的类6广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(0)从上页得知,从上页得知,Java中,类定义的基本语法如下:中,类定义的基本语法如下:作作 用用 域域 class 类类 名名 extends 父父 类类 名名 implements 接口名接口名 成员变量声明成员变量声明 成员方法声明成员方法声明 7广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(1)v类的作用域 用来说明类的特殊性质。分为以下几种:v外部类public公共类型公共类型无关键字无关键字“友好的友好的”abstract:抽象类抽象类final:非继承非继承v protected 和和 private:应用于内部类应用于内部类8广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(2)v关于类头在class关键字后面,应跟随自定义类的名称。(不要把不要把class写写成了成了Class)。父类名跟在父类名跟在extends关键字后面,用来说明当前类是哪个已存在关键字后面,用来说明当前类是哪个已存在类的子类类的子类(只能有一个直接父类,与只能有一个直接父类,与C+不同)不同),说明继承关系。接口名跟在接口名跟在implements关键字后面,用来说明当前类中实现了哪关键字后面,用来说明当前类中实现了哪个接口定义的功能和方法。个接口定义的功能和方法。接口是接口是Java语言用来实现多重继承的语言用来实现多重继承的一种特殊机制。(下一章将对接口进行详细介绍!)一种特殊机制。(下一章将对接口进行详细介绍!)9广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(0)类体的定义要包括类的具体内容,包括类的属性与方法。class 10广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(1)v类的成员变量类的成员变量语法语法:修饰符修饰符 变量类型变量类型 变量名变量名 =变量初值变量初值;例:例:private String name;protected int age;11广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(2)v类的成员方法类的成员方法 类中定义的方法通常起到两种作用:一是围绕着类的属性进行各类中定义的方法通常起到两种作用:一是围绕着类的属性进行各种操作;二是与其他的类或对象进行数据交流、消息传递等操作。种操作;二是与其他的类或对象进行数据交流、消息传递等操作。Java中声明方法的语法如下:中声明方法的语法如下:修饰符修饰符 返回值类型返回值类型 方法名方法名(参数列表参数列表)throws 异常名异常名1,异常名,异常名2,局部变量声明;局部变量声明;语句序列;语句序列;/若返回值类型不为若返回值类型不为void,则需用则需用return语句返回值语句返回值12广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(3)v类的构造方法类的构造方法 一般而言,类的成员方法都是在类的实例对象创建之一般而言,类的成员方法都是在类的实例对象创建之后,才用该对象调用相应的方法。而构造方法能够在创建后,才用该对象调用相应的方法。而构造方法能够在创建对象的同时执行该方法。对象的同时执行该方法。Java允许对象在它们被创建时初始化自己。这种自动允许对象在它们被创建时初始化自己。这种自动的初始化是通过使用构造方法(的初始化是通过使用构造方法(constructor)来完成)来完成的。的。构造方法的任务就是初始化一个对象的内部状态。构造方法的任务就是初始化一个对象的内部状态。13广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(3)v类的构造方法类的构造方法修饰符修饰符 类名称类名称(类型类型1 参数参数1,类型,类型2 参数参数2,)程序语句程序语句;./构造方法没有返回值。构造方法没有返回值。说明:说明:1.修饰符可以是修饰符可以是public或或private.2.构造方法的名字必须与类名相同。构造方法的名字必须与类名相同。3.构造方法没有返回值类型。构造方法没有返回值类型。4.构造方法构造方法不能由编程人员显式地直接调用不能由编程人员显式地直接调用,它是,它是在对象创建时由在对象创建时由new运算符自动调用的运算符自动调用的。5.构造方法构造方法可以重载可以重载,即一个类可以有多个具有不同参数列表的构造,即一个类可以有多个具有不同参数列表的构造方法。方法。14广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(3)v类的构造方法实例类的构造方法实例1class Employee public Employee(String n,double s,int y,int m,int d)/构造方法构造方法 name=n;/职工姓名职工姓名 salary=s;/职工工资职工工资 GregorianCalendar calendar=new GregorianCalendar(y,m-1,d);hireDay=calendar.getTime();/工作日期工作日期 private String name;private double salary;private Date hireDay;Employee e=new Employee(“James Bond”,100000,1950,1,1)15广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(3)v类的构造方法实例类的构造方法实例2构造方法的重载构造方法的重载class CCircle ;public CCircle()/没有参数的构造方法没有参数的构造方法 public CCircle(String str,double r)/有两个参数的构造方有两个参数的构造方法法 16广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(3)v类的默认构造方法类的默认构造方法v每个类都至少有一个构造方法,如果程序员没有为类定义构造方法,系统会自动为该类生成一个默认的构造方法。默认构造方法的名字与类名相同,它的参数列表和方法体均为空,自动将所有实例变量初始化为默认值(数值型为0,布尔型为false,字符型为u0000,对象型为null)。v 一旦定义了自己的构造方法,默认构造方法将不再起作用。17广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(4)v类的析构方法类的析构方法用于释放类的实例并执行特定操作。用于释放类的实例并执行特定操作。Java语言的资源回收机制能够自动释放不再被使用的对象,因此,语言的资源回收机制能够自动释放不再被使用的对象,因此,自定义一般不需要设计析构方法。自定义一般不需要设计析构方法。如果需要主动释放对象,或在释放对象时执行特定操作,则类中如果需要主动释放对象,或在释放对象时执行特定操作,则类中可以定义析构方法。可以定义析构方法。publicvoidfinalize()/析构方法,一个类中只能有一个析构方法,一个类中只能有一个语句序列语句序列;18广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(5)vthis 保留字保留字this是对类对象自身的引用。它是一个泛指,与上下文环境有是对类对象自身的引用。它是一个泛指,与上下文环境有关。例如:关。例如:this.edgeLength=Length;class ThisClass public static void main()Bank bank=new Bank();bank.someMethod(this);/指代对象本身指代对象本身class Circle int r;Circle(int r)this.r=r;public area()return r*r*3;/访问本类的成员方法、成员访问本类的成员方法、成员变量(区分局部变量)变量(区分局部变量)19广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(4)vthisv通过通过this()可以从某个构造函数调用另一个构造函数。例:可以从某个构造函数调用另一个构造函数。例:class CCircle.public CCircle()this(Green,1.0);/此行会调用下面的构造函数此行会调用下面的构造函数public CCircle(String str,double r);完整程序完整程序20广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(4)vinstanceof对象符对象符对象运算符对象运算符instanceof判断一个对象是否属于指定类及其子类,判断一个对象是否属于指定类及其子类,返回返回boolean类型。类型。Date2aday=newDate2(2006,5,1);adayinstanceofDate2/返回返回true,aday是是Date2类对象类对象21广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(3)v关于类体(关于类体(5)vextends在定义类时,使用在定义类时,使用extends来说明与父类的继承关系。来说明与父类的继承关系。Java中的类都是中的类都是Object的子类的子类 22广东工业大学计算机学院广东工业大学计算机学院3.1类类v关于类体(关于类体(5)vextends类的赋值相容性:继承性具有类的赋值相容性:继承性具有“即是即是”性质:子类对象即是父类性质:子类对象即是父类对象。反之则不然对象。反之则不然。例:例:Personp1=Student1s1=(Student1是是Person的子类的子类)p1instanceofPerson1/返回返回true,p1是是Person1类对象类对象s1instanceofPerson1/返回返回true,子类对象即是父类对象子类对象即是父类对象p1instanceofStudent1/返回返回false继承性的继承性的“即是即是”性质表现为父类与子类之间具有赋值相容性,性质表现为父类与子类之间具有赋值相容性,即父类对象能否被转换为子类对象,反之则不然。即父类对象能否被转换为子类对象,反之则不然。例:例:Person1p1=newStudent1();/赋值相容赋值相容Student1s1=newPerson1();/赋值不相容赋值不相容23广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(3)v关于类体(5)vsupervsuper指这个对象的父类,可用来引用父类中的指这个对象的父类,可用来引用父类中的方法(包括构造方法)及变量数据方法(包括构造方法)及变量数据.特别是用于调特别是用于调用被父类所覆盖的实例方法和属性!用被父类所覆盖的实例方法和属性!24广东工业大学计算机学院广东工业大学计算机学院3.1类类v实例实例1:父类实例的:父类实例的super引用引用(访问被覆盖的方法)访问被覆盖的方法)public class Ostrich extends Brid /子类中原有的内容 /增加一个callOverridedMethod()方法 public void callOverridedMethod()/在子类方法中通过super显式调用父类被覆盖的实例方法 super.fly();public static void main(String args)/创建Ostrich对象 Ostrich os=new Ostrich();/执行Ostrich对象的fly方法,将输出“我只能在地上奔跑”os.fly();os.callOverridedMethod();/借助该方法调用被覆盖的fly方法,输出”我在飞“!备注:this和super都不能出现在static修饰的方法中。25广东工业大学计算机学院广东工业大学计算机学院3.1类类v实例实例2:用:用super访问被覆盖的变量访问被覆盖的变量class BaseClass public int a=5;class SubClass extends BaseClass public int a=7;public void accessOwner()System.out.println(a);/访问覆盖属性a,输出7public void accessBase()/super是对该方法调用者对应的父类对象的引用 System.out.println(super.a);/访问父类被覆盖的属性a,输出5.public static void main(String args)26广东工业大学计算机学院广东工业大学计算机学院3.1类类实例3:利用super调用父类的构造方法public class apple extends fruits public apple(int price)super(price);/other code v 以上句子表示使用父类的构造函数生成实例v super必须是子类构造器的第一条语句(构造方必须是子类构造器的第一条语句(构造方法中才是如此)法中才是如此)27广东工业大学计算机学院广东工业大学计算机学院3.1类类关于子类构造方法调用父类构造方法的补充说明。(分三种情况)v子类构造方法第一行用super显式调用父类构造方法,系统将根据super调用里传入的实参列表调用父类相应的构造方法。v子类构造方法第一行使用this显示调用本类中重载的构造方法,系统将根据this调用里传入的实参列表调用本类另一个构造方法。执行本类另一个构造方法时会调用父类的构造方法。v子类构造方法super、this调用,系统将会在执行子类构造方法之前,隐式调用父类无参数的构造方法。也就是说:不管哪种情况,子类构造方法总会调用父类构造也就是说:不管哪种情况,子类构造方法总会调用父类构造方法一次。不仅如此,执行父类构造方法时,系统会再次上溯方法一次。不仅如此,执行父类构造方法时,系统会再次上溯执行其父类的构造方法执行其父类的构造方法,以此类推,创建任何,以此类推,创建任何Java对象,对象,最先执行的总是最先执行的总是Java.lang.Object类的构造方法。类的构造方法。28广东工业大学计算机学院广东工业大学计算机学院3.1类类v实例:演示构造方法之间的调用关系实例:演示构造方法之间的调用关系 class Creature public Creature()System.out.println(“Creatrue无参构造方法无参构造方法”);class Animal extends Creature public Animal(String name)System.out.println(“Animal带一个参数的构造方法带一个参数的构造方法,该动该动 物的物的name为为”+name);public Animal(String name,int age)this(name);System.out.println(“Animal带两个参数的构造函数,其带两个参数的构造函数,其age为为”+age);29广东工业大学计算机学院广东工业大学计算机学院3.1类类v实例:演示构造方法之间的调用关系(续)实例:演示构造方法之间的调用关系(续)public class Wolf extends Animal public Wolf()/显式调用父类带两个参数的构造方法 super(“土狼”,3);System.out.println(“Wolf无参数的构造函数”);public static void main(Stringargs)new Wolf();结果?结果?30广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(4)v创建类及其实例对象创建类及其实例对象v对象是类的一个实例,类是同种对象的抽象,是创建对象的模板。在对象是类的一个实例,类是同种对象的抽象,是创建对象的模板。在程序中创建一个对象将在内存中开辟一块空间,其中包括该对象的属程序中创建一个对象将在内存中开辟一块空间,其中包括该对象的属性和方法。性和方法。v1)newv 我们将分步讲述这个类的实现细节。创建对象使用运算符我们将分步讲述这个类的实现细节。创建对象使用运算符new,例如下面的语句将创建,例如下面的语句将创建Employee类的对象:类的对象:【例例4.1】显示三个员工的相关信息显示三个员工的相关信息31广东工业大学计算机学院广东工业大学计算机学院3.1类类v类的定义格式(类的定义格式(4)v创建类及其实例对象创建类及其实例对象v释放对象释放对象 Java语言有资源回收机制,能够自动跟踪存储单元的使用情况,语言有资源回收机制,能够自动跟踪存储单元的使用情况,自动收回不再被使用的资源。自动收回不再被使用的资源。(C+则必须在对象使用完后释放对象)则必须在对象使用完后释放对象)32广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v访问控制修饰符访问控制修饰符v Java推出了“访问控制修饰符”的概念,允许库创建者声明哪些东西是客户程序员可以使用的,哪些是不可使用的。这种访问控制的级别在“最大访问”和“最小访问”的范围之间,分别包括:public,默认(无关键字),protected以及private。下面的列表说明访问控制修饰符含义:类的类的主要的访问控制修饰符访问控制修饰符类成员的访问控制修饰符类成员的访问控制修饰符符号符号public无关键字public无关键字protectedprivate含义含义公共访问公共访问默认访问默认访问公共访问公共访问默认访问默认访问保护访问保护访问私有访问私有访问33广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v类的访问控制:类的访问控制:public 类只要被声明成public,就意味着它可以被从任何地方访问。public class MyClass int i;void fun()34广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v类的访问控制:类的访问控制:publicv一个源程序在一个源程序在(同一个)文件中可以声明多个类,但用同一个)文件中可以声明多个类,但用public修饰的类只能有一个,且该类名必须与文件名相修饰的类只能有一个,且该类名必须与文件名相同。同。例,在源文件Date1.java中可以声明多个类如下public class Date1/公有的类class Date1_ex 35广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v类的访问控制:类的访问控制:默认方式默认方式(freindly)v假如类不含有一个明确的访问说明,说明它具有默认的访假如类不含有一个明确的访问说明,说明它具有默认的访问控制特性。这种问控制特性。这种默认的访问控制权规定类只能被同一个默认的访问控制权规定类只能被同一个包中的其他代码所访问,在包外不可见。这种访问特性称包中的其他代码所访问,在包外不可见。这种访问特性称为包访问性为包访问性。v在默认方式中,在默认方式中,java将将同一个目录的类也当成同一个同一个目录的类也当成同一个包包,也可以访问。,也可以访问。class MyClass int i;void fun()36广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v实例(指出其中错误之处)v第一个源文件:importdemo.SuperClass;publicclassSubClassextendsSuperClassstaticpublicvoidmain(Stringargs)System.out.println(SubClass.);/Endofmethod:main/Endofclass:SubClassv第二个源文件:packagedemo;classSuperClass/./Endofclass:SuperClass37广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v成员的访问控制方式成员的访问控制方式:publicv则该成员可以被任何类中的方法访问v表明对外开放的方式v对对于于一一个个类类,一一般般只只有有少少量量(或或者者没没有有)public 数数据据成成员员和和部部分分 public 方方法法例:例:public class PubYong public int a;public void print().class text public static void main(String args)PubYong aa=new PubYong();aa.a=112;aa.print();38广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v成员的访问控制方式成员的访问控制方式:privatev目的:隐藏具体的实现细节v只有同一个类的成员方法才能访问私有成员v数据成员常常是private 采用 public“get”方法读取数据采用 public“set”方法写数据public class PrivateUse private String uname;public String getuname()return uname;PrivateUse PrivateUse1=new.String a1=PrivateUse1.getuname();39广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v成员的访问控制方式成员的访问控制方式:private1 /J_CircleTest.java2 /Demonstrate errors resulting from attempts 3 /to access private members of class J_Circle.4 public class J_CircleTest5 6 public static void main(String args)7 8 J_Circle c=new J_Circle();9 10 c.m_radius=10;11 12 J_CircleTest.java:10:m_radius has private access in J_Circle c.m_radius=10;1 error设在类中设在类中J_Circle声明声明:private int m_radius;40广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v成员的访问控制方式成员的访问控制方式:protectedv介于public 和private之间v同一个包内的所有类的所有方法都能访问该成员v如果不在同一个包内的类的方法要访问该成员,则该类必须是该成员所在的类的子类例例:package com.gdut.test;public class ABC protected int pro_i=5;protected void show()System.out.println(“pro_i=”+pro_i;)设UseABC与ABC在同一包里,则在UseABC里可以使用pro_i和和show方法。方法。41广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v成员的访问控制方式成员的访问控制方式:protected package com.gdut.test;public class UseABC public static void main(String args)ABC abc=new ABC();System.out.println (“abc.pro_i=“+abc.pro_i);/可以使用可以使用 abc.show();/可以使用可以使用 42广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v成员的访问控制方式成员的访问控制方式:friendly(缺省方式缺省方式)v只有在同一个包内的类的方法才能访问该方法 v例:例:public class UserOne int a;int b;void print()c=a+b;System.out.println(“a+b=“+c);class UserOne1 public static void main(String args)UserOne a1=new UserOne();a1.a=2;a1.b=3;a1.print();43广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v访问控制修饰符小结访问控制修饰符小结修饰词修饰词 同一个类同一个类 同一个包同一个包 子类子类 所有类所有类 public允许访问允许访问允许访问允许访问允许访问允许访问 允许访问允许访问 protected允许访问允许访问允许访问允许访问允许访问允许访问 default允许访问允许访问允许访问允许访问 private允许访问允许访问44广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v静态修饰符静态修饰符vstatic称为静态修饰符,它可以修饰类中的属性和方法。称为静态修饰符,它可以修饰类中的属性和方法。1.静态变量 声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的对象共用一个static变量。class ABCD char data;static int share_data;class Demo ABCD a,b,c,d;object achar dataobject cchar dataObject bchar datastatic intshare_dataobject dchar data45广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符静态变量实例静态变量实例publicclassStaticVarpublicstaticintnumber5;publicclassOtherClasspublicvoidmethod()intx=StaticVar.number;/访问方式访问方式:类名类名.46广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v静态修饰符静态修饰符v静态方法 声明为static的方法是属于整个类的,它在内存中的代码段将随着类的定义而分配和装载,不被任何一个对象专有。访问static方法或static变量时,应该使用类名做为前缀,而不是某一个具体的对象名。注意:静态方法仅能访问类中的静态数据或其他静态方法,不能访问其他非静态数据和方法。思考:为什么?思考:为什么?47广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符静态方法实例静态方法实例publicclassGeneralFunctionpublicstaticintaddUp(intx,inty)returnx+y;publicclassUseGeneralpublicvoidmethod()inta=9;intb=10;intc=GeneralFunction.addUp(a,b);【例例】静态方法的使用静态方法的使用48广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v抽象修饰符抽象修饰符vabstract是抽象修饰符,可以用来修饰类或方法.1 抽象类当一个类被声明为abstract时,这个类被称为抽象类。抽象类有点类似模板的作用,其目的是要您依据它的格式来修改并创建新的类。(抽象类不能直接建立实例对象!)49广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v抽象修饰符抽象修饰符1 抽象类定义抽象类abstract class 类名称 /定义抽象类 声明成员变量;返回的数据类型 method 名称(参数.)/定义一般的方法 修饰符 abstract 返回数据类型 method 名称(参数.);/定义抽象方法。注意在抽象方法里,没有定义处理的方式。/抽象类至少要有一个抽象方法50广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v抽象修饰符抽象修饰符2 抽象方法 当一个方法被声明为abstract时,这个方法被称为抽象方法。抽象方法属于一种不完整的方法,只有方法头,没有具体的方法体和操作实现。其通用形式如下:abstract 返回值类型 方法名(参数列表)任何含有一个或多个抽象方法的类都必须声明成抽象类。任何含有一个或多个抽象方法的类都必须声明成抽象类。在在Java中抽象方法是非常重要的概念。在接口中会大量的用到。中抽象方法是非常重要的概念。在接口中会大量的用到。51广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符v抽象修饰符抽象修饰符举例:设计一个CShape的父类,依据此类可用来衍生出圆形(circle)、长方形(rectangle)与三角形(triangle)等几何形状的类。abstract class CShape /定义抽象类 protected String color;/成员变量 public void setColor(String str)/一般方法,用来设置形状的颜色 color=str;public abstract void show();/抽象方法,在此没有定义处理方式【例】完整的抽象类实例52广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符vfinal最终修饰符最终修饰符v它可以修饰类、变量和方法。它可以修饰类、变量和方法。v1 最终类最终类 如果如果一个类被声明为一个类被声明为final,意味着它不能再派生出新的子类,意味着它不能再派生出新的子类,不能作为父类被继承不能作为父类被继承。因此声明一个既是。因此声明一个既是abstract又是又是final的类是的类是不合法的。不合法的。被声明成被声明成final的类,通常是一些有特殊作用的、用来完成标准的类,通常是一些有特殊作用的、用来完成标准功能的类,将一个类声明为功能的类,将一个类声明为final可以将它的内容、属性和功能固定可以将它的内容、属性和功能固定下来,与它的类名形成稳定的映射关系,从而保证引用这个类时所实下来,与它的类名形成稳定的映射关系,从而保证引用这个类时所实现的功能是准确无误的。(现的功能是准确无误的。(比如说比如说java.lang.Math类就是一个类就是一个final类类)53广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符vfinal最终修饰符最终修饰符2 最终变量 一个变量可以声明为final,这样做的目的是防止它的内容被修改。这就意味着在声明final变量的时候,必须对其初始化。例如:final int SUM=100;一个final变量实质上就是一个常量。注意:1.final变量的初始化可以先定义(未初始化前不能被使用),再初始化,但是一旦初始化后不能修改。(事实上不使用当然也不用初始化了)2.final成员变量(实例属性或类属性)必须由成员变量显式初始化,即系统不会对final成员进行隐式初始化!54广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符vfinal最终修饰符最终修饰符v2 最终变量(续)final修饰形参:public void test(final int a)/不能对final修饰的形参赋值,下面语句不合法 a=5;思考:为什么不合法?v因为形参在调用该方法时,由系统根据传入的参数来完成初始化,因此使用final修饰的形参不能被赋值。55广东工业大学计算机学院广东工业大学计算机学院3.2修饰符修饰符vfinal最终修饰符最终修饰符3 最终方法 声明成final的方法不能被覆盖。之所以要使用final方法,主要是出于对两方面理由的考虑:第一个是为方法“上锁”,防止任何继承类改变它的本来含义。设计程序时,若希望一个方法的行为在继承期间保持不变,而且不可被覆盖或改写,就可以采取这种做法。采用final方法的第二个理由是提高程序的执行效率。例:Java提供的Object类里就有一个final方法:getclass()56广东工业大学计算机学院广东工业大学计算机学院3.3包包v包的概念包的概念v如果一个类需要在多个地方重用,可以将这个类放在称为如果一个类需要在多个地方重用,可以将这个类放在称为包包(package)的组织结构中。所谓包就是为每一个的组织结构中。所谓包就是为每一个java类提供一个命名空间。(包其实是类提供一个命名空间。(包其实是Java文件的组织形式)文件的组织形式)v定义包定义包语法格式语法格式:package 包名包名;多层次的包定义格式多层次的包定义格式 package 包名包名1.包名包名2.包名包名3;例:例:package China.CQ;57广东工业大学计算机学院广东工业大学计算机学院3.3包包v包的作用包的作用vJava中的包中的包(Package)其实指的就是其实指的就是目录,它是将类目录,它是将类(Class)或者接口或者接口(Interface)分类按照一定的规则存放在不同的分类按照一定的规则存放在不同的文件夹中。文件夹中。v标准的标准的Java类库分布在多个包中,类库分布在多个包中,如如java.lang、java.util、javax等等58广东工业大学计算机学院广东工业大学计算机学院3.3包包v导入所需的类导入所需的类v一个类可以使用它所在的包中的所有类,