版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1JAVA的面向对象吉林工商学院吉林工商学院信息工程信息工程2 本章是学习本章是学习Java语言的核心内容,语言的核心内容,通过本章的学习要深入理解类和对象的通过本章的学习要深入理解类和对象的概念,了解变量和方法的定义,熟练掌概念,了解变量和方法的定义,熟练掌握方法的设计和使用。握方法的设计和使用。本本 章章 学学 习习 导导 读读3教教 学学 重重 点点 与与 难难 点点v类的声明和类体结构类的声明和类体结构( (重点重点) ) v对象的概念对象的概念 ( (难点难点) ) v变量及方法的定义、引用变量及方法的定义、引用( (重点重点) ) v方法参数的传递、方法的重载方法参数的传递、方法的
2、重载( (难点难点) ) v方法的嵌套和递归调用方法的嵌套和递归调用( (难点难点) ) 4类与对象类与对象v类是对某一类事物的描述,是抽象的、概念类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每上的定义;对象是实际存在的该类事物的每个个体,因而也称实例(个个体,因而也称实例(instanceinstance)。)。v如果将对象比作汽车,那么类就是汽车的设如果将对象比作汽车,那么类就是汽车的设计图纸。计图纸。5类的描述类的描述 在在JAVAJAVA语言中,类是程序的基本组成单位。语言中,类是程序的基本组成单位。类体中封装了一组相关的类体中封装了一组相关的数据数据和和
3、方法方法用来与用来与外界的程序相分隔,构成一个独立的模块。外界的程序相分隔,构成一个独立的模块。类封装的实体封装的实体= 数据数据+方法方法程序程序类类类是一组相关的类是一组相关的数据数据和和方法方法的集合。的集合。6 类的构成类的构成类包括类包括类头类头和和类体类体两部分:两部分: 类头类头即类的声明;即类的声明;类体类体是紧接在类头后是紧接在类头后面用一对花括号面用一对花括号“ ”括起来的部分,里括起来的部分,里面包含面包含变量变量的创建和的创建和方法方法定义。定义。7PersonPerson类的例子类的例子 public class Person String name=John ; i
4、nt age=26; double tall=180.5; speak(String saywhat,int time) for(int i=0;itime;i+) System.out.println(name+”say:”+saywhat); 类体部分类体部分类头部分类头部分方法部分方法部分数据部分数据部分8类定义的一般形式类定义的一般形式 类头部分类头部分 修饰符修饰符 class extends implements 1、class2、extends继承使继承使javajava有了严格的层次结构有了严格的层次结构( (Java APIJava API文档文档) ):Object用户自己
5、创建的类java自带类库子类子类extends派生3、 implements接口规定了这个程序必须要完成什么功能接口规定了这个程序必须要完成什么功能import java.applet.*;import java.awt.*; import java.awt.event.*;public class Example18_1 extends Applet implements MouseListener TextField text; public void init() text=new TextField(40); add(text); addMouseListener(this) ;/向小
6、程序增加鼠标事件监视器。向小程序增加鼠标事件监视器。 public void mousePressed(MouseEvent e) public void mouseReleased(MouseEvent e) public void mouseEntered(MouseEvent e) text.setText( 鼠标进来了鼠标进来了,位置是位置是+e.getX()+,+e.getY() ); public void mouseExited(MouseEvent e) text.setText( 鼠标走开了鼠标走开了); public void mouseClicked(MouseEvent
7、 e) 9什么是对象v对象对象是一种类型事物的具体实例。是一种类型事物的具体实例。v它们和现实生活中的对象一样有两个共它们和现实生活中的对象一样有两个共同特征:状态和行为。同特征:状态和行为。类体部分现实生活中对象:现实生活中对象:状态状态肥胖肥胖行为行为微笑微笑对象封装了对象封装了状态和行为状态和行为状态状态数据(变量或常量)数据(变量或常量)行为行为方法方法10对对 象象 和和 类类 的的 关关 系系对象类抽象抽象实例化实例化类是创建类是创建对象对象的模板,其本质是一的模板,其本质是一套计划,规定如何构造一个对象。套计划,规定如何构造一个对象。对象是类的特性的体现,是具体的对象是类的特性的
8、体现,是具体的实施者。实施者。11类、对象与变量和方法间的协调关系类、对象与变量和方法间的协调关系汽车类的基本属性:速度、方向等汽车类的基本属性:速度、方向等1 1、踩油门、刹车、踩油门、刹车2 2、转方向盘、转方向盘方法方法汽车类下具体的一个对象汽车类下具体的一个对象具备类的基本特征:速度、具备类的基本特征:速度、方向等(变量)方向等(变量)改变汽车的速度、方向等可改变汽车的速度、方向等可通过一系列动作行为来完成通过一系列动作行为来完成12对象的创建对象的创建一般形式:一般形式: = new = new ();如:如: Person p1 = newnew Person ( ); 类体部分如
9、:如:Person p2 ;/ p2(/ p2(句柄变量句柄变量) )可理解为指针,此时可理解为指针,此时 的值为的值为null p2 = new new Person( ); 或:或: ; = = newnew () ) ;13对象的产生对象的产生 Person p1 = new Person(); Person p1 = new Person();执行完后的内存状态执行完后的内存状态句柄变量句柄变量p1 p1 是一个是一个3232位的内存地址空间,其中包含位的内存地址空间,其中包含的值为的值为PersonPerson对象实际所在的堆内存的首地址对象实际所在的堆内存的首地址14对象的生存周期
10、及垃圾回收15对对 象象 的的 使使 用用 对象是类的实例化,具备类中定义的一切属对象是类的实例化,具备类中定义的一切属性(变量)和行为(方法),使用对象也就是性(变量)和行为(方法),使用对象也就是使用堆内存中对象的使用堆内存中对象的变量变量和和方法方法。 例例: Person p1= new Person( ); : Person p1= new Person( ); . . ; . . (参数列表参数列表););对象用圆点运算符对象用圆点运算符“ “ ” ”调用其下的成员变量和方法调用其下的成员变量和方法 p1.age = 20;p1.age = 20;16对对 象象 的的 使使 用用
11、每一个新的对象产生时,都会将本类中的实每一个新的对象产生时,都会将本类中的实例变量备份到自己的存储区中。例变量备份到自己的存储区中。如:如: Person P1= new Person ( );Person P1= new Person ( ); Person P2= new Person ( ); Person P2= new Person ( ); P1.age=-30;P1.age=-30;P2.age=0;P2.age=0;同一个同一个age变量,相对于不变量,相对于不同对象来说取值可以不同。同对象来说取值可以不同。演示演示17对象访问类成员时内存中的变化18创建对象的实质创建对象的实
12、质创建一个对象实际上执行了如下操作:创建一个对象实际上执行了如下操作:1 1、创建对象的名称、创建对象的名称-句柄变量句柄变量。2 2、用、用“new”new”运算符为该对象分配内存。运算符为该对象分配内存。3 3、调用该类的、调用该类的构造方法构造方法初始化该对象。初始化该对象。Person p1= new Person( ); Person p1= new Person( ); 匿名对象匿名对象19在类下创建变量和方法在类下创建变量和方法 类体部分类体部分一、一、变量变量v变量分类:变量分类:1 1、类类( (静态静态) )变量变量- - 定义在类体内,其他块定义在类体内,其他块之外,用关
13、键字之外,用关键字staticstatic修饰。修饰。如:如: static int x=5;static int x=5;2 2、实例变量实例变量-定义在类体内,其他块之外,定义在类体内,其他块之外,且不被关键字且不被关键字staticstatic修饰。修饰。3 3、局部变量局部变量-定义在块体之内,其定义在块体之内,其作用域作用域就在块体内部。就在块体内部。v变量的变量的作用域作用域:20栈内存栈内存类类person p1p2agecountryint age=0;static String country=“china”;person p1=new person();person p2=
14、new person();实例变量、静态变量间的实例变量、静态变量间的区别区别: 21方方 法法 方法描述类能做什么方法描述类能做什么( (行为行为) ),体现的是,体现的是程序的作用。程序的作用。 每个方法代表的是一段具有特定功能的程每个方法代表的是一段具有特定功能的程序段(类似于序段(类似于C C中的函数),使用方法,提高中的函数),使用方法,提高了程序代码的可复用性。了程序代码的可复用性。22 修饰符修饰符 ( 参数列表参数列表 ) 方法体;方法体; return (return (返回值返回值) ); 方法的声明方法的声明类体部分1 1、返回值类型、返回值类型方法必须声明返回值类型,返
15、回值用方法必须声明返回值类型,返回值用returnreturn语句带出语句带出; ;如如果没有返回值,则要声名为果没有返回值,则要声名为voidvoid 类型类型2 2、参数列表、参数列表是一组变量声明是一组变量声明( (形参形参) );调用方法时用来接收消息;调用方法时用来接收消息( (实参实参) )。例如例如 : private double area(double r) double s=Math.PI*r*r; return s; 23方法的分类JavaJava语言中的方法可分为三种:语言中的方法可分为三种:静态方法:也叫类方法,用静态方法:也叫类方法,用staticstatic修饰,
16、如修饰,如main()main();在使用时;在使用时可以用可以用 类名类名.方法方法 或或 对象名对象名.方法方法 的方式的方式调用调用 ;实例方法:不用实例方法:不用staticstatic修饰的方法,这种方法在使用时不能修饰的方法,这种方法在使用时不能用用 类名类名.方法方法 的方式来调用,而要用的方式来调用,而要用 对象对象名名.方法方法 调用。调用。特殊方法:特殊方法:构造方法构造方法和和main( )等自动运行方法。等自动运行方法。24方法的调用执行过程class mianji private double area(double x, double y ) return x*y;
17、 public static void main(String ar ) mianji mj=new mianji( ); double m=4.0 , n=5.0; double total=mj.area(m,n); System.out.println(total); 方法调用方法调用返回结果返回结果25this是什么? thisthis关键字代表当前的对象本身,可关键字代表当前的对象本身,可用来引用当前对象的成员变量,多数时用来引用当前对象的成员变量,多数时候都可以省略。候都可以省略。 在方法的形参和类中的成员变量重名在方法的形参和类中的成员变量重名时,不可省略。时,不可省略。26cl
18、ass TestString name;public Test(String x)name=x;public show( ) System.out.print(name); Class callTest public static void main(String args) Test a1 = new Test(“a1);a1.show(); Test a2 = new Test(“a2);a2. show(); 27this引用句柄的存放位置每个成员方法内部,都有一个this引用变量,指向调用这个方法的对象,类中的成员方法与this之间的关系如图nameshout28方法的参数方法的参数
19、在方法声明参数列表里的参数,称为在方法声明参数列表里的参数,称为形参形参;方法被调用时,方法被调用时,形参形参会被会被实参实参( (变量或具体数值变量或具体数值) )所所取代;实参的类型与次序,需与形参完全吻合。取代;实参的类型与次序,需与形参完全吻合。如:如: int 面积面积(double x,int y,int z)return y*z; int area=面积面积(3.0,4,5);System.out.println(area);输出结果为:输出结果为:2029方法的参数传递方法的参数传递 若方法的参数为基本数据类型(如若方法的参数为基本数据类型(如int,charint,char等
20、),等),称为称为传值调用传值调用; 方法的参数传递,依参数的类型,分为方法的参数传递,依参数的类型,分为传值调用传值调用与与传址调用传址调用两种:两种:注意:注意:传值调用不会改变所传参数的真正数值;传值调用不会改变所传参数的真正数值;传址调用会改变其所指向的地址里的数值。传址调用会改变其所指向的地址里的数值。 若方法的参数为复合数据类型(如对象、数组),若方法的参数为复合数据类型(如对象、数组),称为称为传址调用传址调用。30方法的参数传递基本数据类型的参数传递 class PassValuepublic static void main(String args)int x = 5;cha
21、nge(x);System.out.println(x);public static void change(int x)x = 3;31方法的参数传递基本数据类型的参数传递 32方法的参数传递引用数据类型的参数传递class PassRefint x ;public static void main(String args)PassRef obj = new PassRef();obj.x = 5;change(obj);System.out.println(obj.x);public static void change(PassRef obj)obj.x=3;33方法的参数传递引用数据类
22、型的参数传递34方法的参数传递方法的参数传递引用参数传递的问题分析引用参数传递的问题分析class PassRefint x ;public static void main(String args)PassRef obj = new PassRef();obj.x = 5;change(obj);System.out.println(obj.x);public static void change(PassRef obj) obj=new PassRef(); obj.x=3;35方法的参数传递引用参数传递的问题分析36方方 法法 的的 使使 用用 方方 式式v在同一个类中定义若干个同名的方
23、法,在同一个类中定义若干个同名的方法,但方法的参数个数、类型、顺序不同,但方法的参数个数、类型、顺序不同,这种机制称为方法的重载这种机制称为方法的重载v不同的参数列表不同的参数列表prt(int a,char ch)prt(int a,char ch)prt(char ch,int a)prt(char ch,int a)prt(int a,int x,double d)prt(int a,int x,double d)v是在一个类中程序多态性的表现。是在一个类中程序多态性的表现。1 1、方法重载、方法重载(Overloading)(Overloading)37方法的递归调用long fact
24、(int n)long fact(int n) if (n=1) return 1; if (n=1) return 1; else return n else return n* *fact(n-1);fact(n-1); 一个方法体里调用该方法自身的情况就叫递归一个方法体里调用该方法自身的情况就叫递归特点:使程序的实现变得简单。特点:使程序的实现变得简单。递归结束的条件递归结束的条件38递递 归归 示示 例例 import java.io. import java.io.* *; ;public class Li5_7public class Li5_7 static int fact(i
25、nt k) static int fact(int k) if(k=1)return 1; if(k=1)return 1; else return k else return k* *fact(k-1);fact(k-1); public static void main(String public static void main(Stringargs)args) int i=Integer.parseInt(args0); int i=Integer.parseInt(args0); System.out.println(i+-+fact(i); System.out.println(i
26、+-+fact(i); 执行过程执行过程Fact(3)=3*fact(2)=3*(2*fact(1)=3*(2*1)=3*2=6从键盘输入一个数值,求该数的阶乘从键盘输入一个数值,求该数的阶乘39对象的初始化构造方法 构造方法专门用来为类的成员变量赋初值(初构造方法专门用来为类的成员变量赋初值(初始化),在对象被创建的时候始化),在对象被创建的时候自动自动被调用。被调用。Point p= new Point( );40构造方法的示例构造方法的示例 class Person String name=“unknown”; int age = -1;public Person(String n, i
27、nt a) name = n; age = a;System.out.println(“name and age is: +name+;+age);class TestPersonpublic static void main(String args)Person p1=new Person(Tom,18);Person p2=new Person(“Jerry,20);41p1=new Person(“Tom”,18) 的内存状态变化分析的内存状态变化分析124342构造方法的特点1、构造方法构造方法名必须与其类名相同;名必须与其类名相同;2、构造方法没有返回值,但可以有参数;构造方法没有返
28、回值,但可以有参数;3、一个类可以有多个不同的构造方法。一个类可以有多个不同的构造方法。4、构造方法用于初始化新创建的对象,构造方法用于初始化新创建的对象,只能在创建对象时被系统只能在创建对象时被系统自动自动调用调用43构造方法的重载构造方法的重载 v构造方法也支持重载,依据不同类构造方法也支持重载,依据不同类型或个数的型或个数的参数参数,编译器可以判断,编译器可以判断出创建新的对象时,该调用哪个构出创建新的对象时,该调用哪个构造方法;构造方法间也可以互相调造方法;构造方法间也可以互相调用,调用其他构造方法时,必须用用,调用其他构造方法时,必须用关键字关键字thisthis来代替被调用构造方法
29、来代替被调用构造方法的名称。的名称。44默认的构造方法默认的构造方法v每个类中都每个类中都至少有一个构造方法至少有一个构造方法,如果程序员没有在,如果程序员没有在类里定义构造方法,系统会自动为该类生成一个类里定义构造方法,系统会自动为该类生成一个默认默认的构造方法的构造方法,这个默认构造方法没有参数,方法体中,这个默认构造方法没有参数,方法体中也没有任何代码,也没有任何代码,即什么也不做即什么也不做。 Class ConstructClass Construct public Construct()45构造方法的一些细节构造方法的一些细节 v由于系统提供的默认构造方法往往不能由于系统提供的默认
30、构造方法往往不能满足编程者的需求,所以我们可以自己满足编程者的需求,所以我们可以自己定义类的构造方法以满足需要一旦编定义类的构造方法以满足需要一旦编程者为该类定义了构造方法,程者为该类定义了构造方法,系统就不系统就不再提供默认的构造方法了。再提供默认的构造方法了。 46思考:下面程序有什么问题?思考:下面程序有什么问题?Class Construct int age; public Construct(int x) age=x; Class TestConstruct public static void main(String args) Construct c=new Construct(
31、); 47常用类库使用方法常用类库使用方法 在在JAVAJAVA类库中提供了常用的一些类和方类库中提供了常用的一些类和方法,如在法,如在java.langjava.lang包中有一个包中有一个MathMath类,类,其中定义了多种方法用来对数学运算做其中定义了多种方法用来对数学运算做处理:处理:abs()abs()、max()max()、min()min()、log()log()、floor()floor()、ceil()ceil()、random()random()等等48import java.io.*; class nixu public static void main(String
32、arg ) throws IOExceptionint a,b,c,d;int i=Integer.parseInt(arg0);if(i0&i10000)a=(int)Math.floor(i/1000);b=(int)Math.floor(i-a*1000)/100);c=(int)Math.floor(i-a*1000-b*100)/10);d=i-a*1000-b*100-c*10;System.out.println(d+c+b+a);输入一个四位整数,然后按逆序输出输入一个四位整数,然后按逆序输出49类的使用1、私有成员的访问2、类对象用做方法参数3、方法返回值为类的对象4、类对象
33、作为类的成员5、内部类50 本本 节节 小小 结结 1.1.类类JavaJava程序的基本单位是类,一个程序里可以有多个程序的基本单位是类,一个程序里可以有多个类,但只能有一个被类,但只能有一个被publicpublic修饰,且文件名要与该修饰,且文件名要与该类名一致。类的定义可以看作是建立对象的原形。类名一致。类的定义可以看作是建立对象的原形。类被建立之后,就可以用它来创建许多你需要的对类被建立之后,就可以用它来创建许多你需要的对象。象。类的基本定义方法如下:类的基本定义方法如下:修饰符修饰符 class 类名类名 extends 父类父类 implements 接口名接口名 类成员变量声明
34、;类成员变量声明; 类方法声明;类方法声明;512对象对象v 对象是类的实例,对象是类的实例,使用关键字使用关键字new创建,创建,在程在程序中创建序中创建个对象将在内存中开辟一块空间,个对象将在内存中开辟一块空间,用来保存从类复制过来的变量。用来保存从类复制过来的变量。3构造方法构造方法v构造方法是类的一种特殊方法:构造方法是类的一种特殊方法:(1)构造方法的名称与类名相同。)构造方法的名称与类名相同。(2)没有返回类型。)没有返回类型。(3)用来完成对类对象的初始化工作。)用来完成对类对象的初始化工作。(4)不能显式地直接调用,在创建一个类的新对)不能显式地直接调用,在创建一个类的新对象的
35、同时,系统会自动调用该类的构造方法为象的同时,系统会自动调用该类的构造方法为新对象初始化。新对象初始化。524、方法、方法方法定义的基本形式:方法定义的基本形式:修饰符修饰符 返回类型返回类型 方法名方法名( (参数列表参数列表) )方法体:方法体:(1)方法命名要遵循标识符的规则:)方法命名要遵循标识符的规则:(2)程序中有重复的代码以及重载父类方法时都可)程序中有重复的代码以及重载父类方法时都可以定义成类的方法。以定义成类的方法。(3)方法通常具有相对独立的功能和明确的输入、)方法通常具有相对独立的功能和明确的输入、输出接口。输出接口。53继继 承承 54为什么引入继承修饰符修饰符 B e
36、xtends A 类体;类体; 类Anameage. . . 类Bnameage. . . 父类或超类继承子类或派生类注意:注意:引入继承可引入继承可以简化类的定义以简化类的定义55关关 于于 继继 承承、只能有一个父类,即单继承、只能有一个父类,即单继承、当没有、当没有extendsextends时,默认父类为时,默认父类为ObjectObject、子类继承父类的全部、子类继承父类的全部非私有非私有成员成员、子类有自己的特性(变量和方法)、子类有自己的特性(变量和方法)、类继承具有传递性、类继承具有传递性56类的成员覆盖类的成员覆盖 类成员覆盖是指在子类中新增加的成员变类成员覆盖是指在子类中
37、新增加的成员变量或成员方法的名称与父类中定义的相同。量或成员方法的名称与父类中定义的相同。class A void area( )class B extends A void area( ) v覆盖和重载是覆盖和重载是java语言多态性的表现。语言多态性的表现。如:如:57方法的覆盖方法的覆盖 class Father void speak() / 父类定义的父类定义的speak方法方法System.out.println(I am Father!); class Son extends Father void speak() / 子类重写子类重写的的speak方法方法System.out.p
38、rintln(I am Son!); public class Check public static void main (String args ) Son x=new Son(); x.speak(); / 调用子类的调用子类的speak方法方法 结果是:结果是:I am Son! I am Son! 类类SonSon中的中的speakspeak()方法重写了其父类()方法重写了其父类FatherFather中同名的方中同名的方法,而法,而SonSon的对象的对象x x调用调用speakspeak()方法时,使用的是()方法时,使用的是SonSon中中定义的方法。定义的方法。 58vsu
39、persuper super super是父类占位符,用来引用父类中是父类占位符,用来引用父类中的方法和变量,主要是被覆盖了的变量或的方法和变量,主要是被覆盖了的变量或者方法者方法. .不可省略不可省略. .super super 句柄的使用句柄的使用59演示演示this和和super的使用的使用public class Demo1 extends SuperClass float a =4f; public void print() int a =5; super.print();System.out.println(a); System.out.println(this.a); Syste
40、m.out.println(super.a); public static void main(String args )Demo1 d = new Demo1(); d.print(); class SuperClass int a=3; public void print()System.out.println(SuperClass); 运行结果运行结果:SuperClass54.0360thisthis和和supersuper的比较的比较1.this1.this(1 1)访问当前对象的数据成员)访问当前对象的数据成员(2 2)访问当前对象的成员变量)访问当前对象的成员变量(3 3)重载时
41、用来引用同类的其他构造方法)重载时用来引用同类的其他构造方法2.super2.super(1 1)访问直接父类中被隐藏的数据成员)访问直接父类中被隐藏的数据成员(2 2)调用直接父类中被重写的成员方法)调用直接父类中被重写的成员方法(3 3)调用直接父类的构造方法)调用直接父类的构造方法61 、子类只继承父类的默认无形参构造方法,、子类只继承父类的默认无形参构造方法,在创建子类对象时先调用这个构造方法进行在创建子类对象时先调用这个构造方法进行初始化,然后再调用子类自己定义的构造方初始化,然后再调用子类自己定义的构造方法;如果父类没有默认构造方法,子类将不法;如果父类没有默认构造方法,子类将不能
42、从父类继承到任何构造方法。能从父类继承到任何构造方法。、子类调用父类的非默认构造方法,必须、子类调用父类的非默认构造方法,必须用用super super 来实现,且该语句要处于构造方法来实现,且该语句要处于构造方法中的第一行。中的第一行。构造方法的继承构造方法的继承62 class studentdouble a;int b;student (double x, int y)a=x;b=y;public class student1 extends studentdouble c;student1(int m,int n,int z)super(m,n);c=a+b+z;public stat
43、ic void main (String arg )student1 s1=new student1(3,4,5);System.out.println(s1.c);63类对象之间的类型转换v父类对象和子类对象之间在一定条件下也可父类对象和子类对象之间在一定条件下也可以相互转换,原则如下:以相互转换,原则如下:1、子类对象可以被视为是其父类的一个对象,、子类对象可以被视为是其父类的一个对象,反之则不可。反之则不可。2、若父类对象引用指向的实际是一个子类对、若父类对象引用指向的实际是一个子类对象,按照第一条准则,该对象仍然是父类的对象,按照第一条准则,该对象仍然是父类的对象,但它可以通过强制类型
44、转换成子类对象的象,但它可以通过强制类型转换成子类对象的引用。引用。 3、若一个方法的形参定义为父类的对象,则、若一个方法的形参定义为父类的对象,则调用该方法时实参可使用子类对象。调用该方法时实参可使用子类对象。64抽象类和接口65 抽抽 象象 类类 与与 抽抽 象象 方方 法法 v抽象方法:只有声明但没有方法体的方法抽象方法:只有声明但没有方法体的方法 abstract int meth(char ch);abstract int meth(char ch);含有抽象方法的类叫抽象类,也必须用关键含有抽象方法的类叫抽象类,也必须用关键字字abstractabstract声明,声明,抽象类不能
45、实例化抽象类不能实例化。v子类在继承抽象类时,必须重写其父类的全子类在继承抽象类时,必须重写其父类的全部抽象方法后才能实例化,否则这个子类还部抽象方法后才能实例化,否则这个子类还是一个抽象类。是一个抽象类。66抽抽 象象 类类 举举 例例 abstract class Figure / 定义抽象类定义抽象类Figure double x,y; void set_size(double size1,size2) x=size1; y=size2; abstract double get_area(); / 定义抽象方法定义抽象方法get_area,它没有方法体,它没有方法体class Trian
46、gle extends Figure / Triangle 继承抽象类继承抽象类Figure double get_area() / 重写其父类的抽象方法重写其父类的抽象方法get_area() return(x*y/2); /三角形面积三角形面积=底底*高高/2 class Rectangle extends Figure / Rectangle 继承抽象类继承抽象类Figure double get_area() /重写重写其父类的抽象方法其父类的抽象方法get_area() return(x*y); /矩形面积矩形面积=长长*宽宽 67抽象类的作用抽象类的作用v抽象类的作用就是让设计和具
47、体实现相分离抽象类的作用就是让设计和具体实现相分离抽象类只规定了类的共性,是一个高度抽象的抽象类只规定了类的共性,是一个高度抽象的概念,是面向对象的精髓所在。概念,是面向对象的精髓所在。v在实际开发中,编写抽象类的,编写具体子类在实际开发中,编写抽象类的,编写具体子类程序的,以及调用子类程序的通常都不是一个程序的,以及调用子类程序的通常都不是一个人。而抽象方法的定义相当于给他们提供了一人。而抽象方法的定义相当于给他们提供了一个统一的规范个统一的规范 68为什么引入接口为什么引入接口(interface ) Java Java 中只能单一继承,但实际应中只能单一继承,但实际应用中又有多重继承的需
48、要,接口就是用中又有多重继承的需要,接口就是用来解决这个问题用来解决这个问题接口和多重继承的主要区别:接口和多重继承的主要区别:一个接口提供了一套抽象的方法用以一个接口提供了一套抽象的方法用以限定实现该接口的所有的类的行为,限定实现该接口的所有的类的行为,而不必强迫用户去继承某个类。而不必强迫用户去继承某个类。69什什 么么 是是 接接 口口v比如诗词歌赋的比如诗词歌赋的格式格式w 接口是用来完成某一特定功能的没有方法接口是用来完成某一特定功能的没有方法体的方法(抽象方法)和常量的集合;本体的方法(抽象方法)和常量的集合;本质上来说是定义了一组行为的质上来说是定义了一组行为的协议协议。 在接口
49、中,可以说明一整套抽象的方在接口中,可以说明一整套抽象的方法而无须去具体实现它,所有实现此接法而无须去具体实现它,所有实现此接口的类,都必须要实现接口中定义的全口的类,都必须要实现接口中定义的全部抽象方法。部抽象方法。70何时使用接口何时使用接口 当确定多个类的操作方式都很相像时,当确定多个类的操作方式都很相像时,就可以创建一个接口,并让各个类都实现该就可以创建一个接口,并让各个类都实现该接口,以限定这些类的基本功能。接口,以限定这些类的基本功能。 例如:让创建的所有能够求图形面积的类都有例如:让创建的所有能够求图形面积的类都有一个一个area( )area( )方法,就可以创建一个如下接口:
50、方法,就可以创建一个如下接口: public interface Shapepublic interface Shape void area( ); void area( ); 现在,当创建一个实现现在,当创建一个实现ShapeShape接口的类时,就接口的类时,就必须实现成员方法必须实现成员方法area( )area( ),限定了类的行为。,限定了类的行为。 71 修饰符修饰符 interface interface 接口名称接口名称 public static final public static final 变量名初值;变量名初值;/静态常量静态常量 public abstract p
51、ublic abstract 返回值返回值 方法名(方法名( 参数表参数表 ); ; 接口中声明的方法都是抽象方法,需要在实现该接口的类接口中声明的方法都是抽象方法,需要在实现该接口的类中被覆盖(实现),抽象方法的定义类似于变量的声明,中被覆盖(实现),抽象方法的定义类似于变量的声明,如:如:String getdata( );String getdata( ); 此处一定注意其格式,没有方法体,且后面要加分号。此处一定注意其格式,没有方法体,且后面要加分号。接口注意事项接口注意事项 (1 1)接口中的所有变量必须是)接口中的所有变量必须是public static finalpublic s
52、tatic final,方法必须是方法必须是public abstractpublic abstract,这是系统默认的,所以,这是系统默认的,所以在定义接口时,写不写这些修饰符都是一样的。在定义接口时,写不写这些修饰符都是一样的。(2 2)变量必须被初始化)变量必须被初始化72 接接 口口 的的 实实 现现 通过使用关键字通过使用关键字implementsimplements,可以在定,可以在定义类时实现一个接口列表。如:义类时实现一个接口列表。如:class A extends B class A extends B implementsimplements 接口接口1, 1, 接口接口n
53、 n 与类继承不同的是,一个类可以同时实现与类继承不同的是,一个类可以同时实现多个接口。多个接口。73接口的定义和实现interface A double PI=3.14 ; void area( ); class B implements Adouble r=5.0;public void area( ) System.out.println(“area=“+PI*r*r) ; class C implements Adouble w=4.0, h=5.0;public void area( ) System.out.println(“area=“+w*h) ;class Test publ
54、ic static void main(String args ) B b=new B( ); b.area( ); (new C( ).area( ); 74 注意:注意:()一个类在实现某接口中的抽象方法时,必须()一个类在实现某接口中的抽象方法时,必须使用完全相同的使用完全相同的方法名和参数列表方法名和参数列表。 ()接口的抽象方法的修饰符已指定为()接口的抽象方法的修饰符已指定为publicpublic,所以接口在被实现时,必须使用所以接口在被实现时,必须使用publicpublic修饰符,否修饰符,否则系统将警告缩小了接口中方法的访问控制范围。则系统将警告缩小了接口中方法的访问控制范
55、围。75接口的继承与组合interface A int sub(int a,int b);interface B extends A int add(int a,int b); interface C extends B int mul(int a,int b);组合:interface Aint sub(int a,int b);interface Bint add(int a,int b);interface C extends A,Bint mul(int a,int b);76包 简 介77理解包的概念v包(包(packagepackage)是一组是一组相关的类和接口的集合相关的类和接
56、口的集合,它提供了访,它提供了访问权限和命名的管理机制。问权限和命名的管理机制。 包主要有三个作用:包主要有三个作用: 1 1、使功能相关的类易于查找和方便重复使用、使功能相关的类易于查找和方便重复使用 2 2、避免了命名的冲突、避免了命名的冲突 3 3、起到封装作用,限制访问权限、起到封装作用,限制访问权限78 Java的包 包的概念和存在的目的都与其它语言的函数库非包的概念和存在的目的都与其它语言的函数库非常类似,包中封装的是一组类。常类似,包中封装的是一组类。 JavaJava自身提供了自身提供了2121个预先设定好的包,详情请参个预先设定好的包,详情请参看看JavaJava的的APIA
57、PI文档文档,可以从如下网址获得:,可以从如下网址获得: java.langjava.lang 提供基本数据类型及操作提供基本数据类型及操作java.utiljava.util 提供高级数据类型及操作提供高级数据类型及操作java.iojava.io 提供输入提供输入/ /输出流控制输出流控制java.awtjava.awt 提供图形窗口界面控制提供图形窗口界面控制79JAVA APIJAVA API中的包结构中的包结构v默认情况下,用户创建的所有类都自动导入默认情况下,用户创建的所有类都自动导入Java.langJava.lang包包Java.lang包Java.io包 Java.awt包J
58、ava.applet包.用户自定义的类Java类库类库(API)Writer类Reader类Button类Color 类Applet类AudioClip类80创创 建建 包包v包由关键字包由关键字packagepackage创建,一般形式如下创建,一般形式如下: package Package1.Package2.PackageN; v包的名称对应于磁盘的路径,例如用下面包的名称对应于磁盘的路径,例如用下面的方式来构造一个包:的方式来构造一个包: package myclass.Shapes; 则归入则归入该包的类的字节代码文件应放在该包的类的字节代码文件应放在javajava的类库所在路径的
59、的类库所在路径的myclassmyclass目录下的目录下的ShapesShapes子目录下。子目录下。81引用已存在的包v为了使用已创建的包下的类,必须用关键字为了使用已创建的包下的类,必须用关键字importimport,可用以下三种方式引用包中的类:,可用以下三种方式引用包中的类: 1 1、在每一个类名前给出其所在的包名、在每一个类名前给出其所在的包名: : java.awt.Button b=new java.awt.Button(“OK”); 2 2、引用类本身、引用类本身: : import java.awt.Button; 3 3、引用整个外包、引用整个外包: : import
60、java.awt.*;v如果没有显式地导入一个包,一个类只能引用如果没有显式地导入一个包,一个类只能引用与它在同一个包中的类,与它在同一个包中的类,例如例如82创建及使用包注意事项创建及使用包注意事项vpackagepackage语句必须处在程序的第一行。语句必须处在程序的第一行。v没有没有packagepackage语句时,语句时,importimport语句要处在程序语句要处在程序的第一行。的第一行。v导入一个包,如:导入一个包,如:import java.awt.import java.awt.* *, , 这这只能导入该包下的所有的公共类,且不包含只能导入该包下的所有的公共类,且不包含
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 洱源县2025年数学四下期中达标检测模拟试题(含答案)
- 洛宁县2025年数学三年级第二学期期中联考试题含答案
- 有色金属材热处理工岗前安全技能考核试卷含答案
- 27届沪教版九上化学复习训练题-水
- 铝电解工操作能力竞赛考核试卷含答案
- 钽铌压制成型工操作管理模拟考核试卷含答案
- 硅烷法多晶硅制取工安全生产知识评优考核试卷含答案
- 浆丝机操作工安全生产知识强化考核试卷含答案
- 熔喷工岗中师带徒考核试卷含答案
- 瓶装气客服员安全强化竞赛考核试卷含答案
- 2026年事业单位招聘考试综合知识冲刺押题试卷
- 2026秋国家开放大学网课《形势与政策》大作业答案
- 2026年人教版七年级上册语文期中测试题
- 2026年国际贸易托收考试题库及答案
- (2026年)宫颈癌放疗患者护理查房课件
- 2026届北京市朝阳外国语高三生物第一学期期末学业质量监测试题含解析
- 乡土文学课件
- 鼠疫应急处置培训课件
- T∕CSTM 00181-2020 化学试剂 六水合氯化锶
- 中国石化保密管理制度
- 病区免陪照护服务的规范化管理与实践
评论
0/150
提交评论