版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象程序设计,理解面向对象程序设计,面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏;2、黑子先走;3、绘制画面;4、判断输赢;5、轮到白子;6、绘制画面;7、判断输赢;8、返回步骤2;9、输出最后结果。 把上面每个步骤用分别的函数来实现,问题就解决了。 而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为: 1、黑白双方,这两
2、方的行为是一模一样的;2、棋盘系统,负责绘制画面;3、规则系统,负责判定诸如犯规、输赢等。 第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。 可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。 功能上的统一保证了面向对象设计的可扩展性。比
3、如我要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。 要采用面向对象的编程思想,必须理解类和对象两个重要概念。,对象,现实世界是由各种东西组成,例如:张三、李四、老师的这台电脑、我家的房子、你的笔等等。我们将这些东西称为对象。 对象是实实在在存在的,是具体的。 一切都是对象。 我们是怎么描述这些对象呢?,对象的示例,收银员对象,顾客对象,顾客
4、 姓名:朱丽叶 年龄:28 体重:52千克 操作: 购买商品,属性,姓名:布兰尼 职衔:收银员 年龄:35 体重:60千克 操作: 收款 打印帐单,行为,类,为了描述这些对象,将具有相同属性和行为的对象分为一类,例如:人、电脑、房屋等等。并给每个类下了一个定义(描述), 这个定义(描述)就是类,它包括了对这一类对象的属性和行为的描述。,类与对象,类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例(instance)。,如果将对象比作汽车,那么类就是汽车的设计图纸。所以面向对象程序设计的重点是类的设计。,类和对象的示例,请同学们列举日常生活中的一些类
5、和对象。,雇员,收银员,系统管理员,仓库管理员,面向对象程序设计过程,面向对象程序设计的关键是如何从现实世界的实体中抽象出类。,类的定义,定义类的格式 class 类名 属性; 行为 属性用变量表示,又称为成员变量 行为用方法表示,又称为成员方法,类的定义,例:定义一个人的类: class Person int age; void shout() System.out.println(“oh,my god! I am “ + age); 类名命名规范:类的名字首字母大写,通常由多个单词合成一个类名,要求每个单词的首字母也要大写。 age是类的属性 ,也叫类的成员变量 。 shout是方法也叫类
6、的成员函数,在成员函数中可以使用成员变量。 方法名命名规范:方法名的第一个单词应该是动词,要求每个单词的首字母要大写,但首字母应小写,并限制使用下划线。参数的名字必须和变量的命名规范一致,使用有意义的参数命名。,练习,定义一个二维空间中的点类,在该点类中提供可以计算点距原点距离的方法; 创建一个名为rectangle的矩形类,它具有长和宽属性,并且具有一个求面积的方法。,局部变量和成员变量,局部变量:方法或语句块内部的变量 成员变量:方法外部、类的内部定义的变量 注意:类外面不能有变量 变量作用域:变量的作用域在它定义的大括号内,出了大括号将失去作用。,局部变量和成员变量,class Data
7、 int x=12; int y=5; public void sum() int x=3; int s1=0; int s2=0; s1=x+y; for(int i=0;is1;i+) s2=s2+i; System.out.println(“i=”+i); System.out.println(“s2=”+s2); ,对象的生成及使用,对象的声明: 类名 对象名; 对象的生成: 对象名=new 类名(); 上面两步可以合成: 类名 对象名=new 类名(); 访问对象成员的一般形式为: 对象名.成员变量名 对象名.成员方法名(),对象的生成,public class TestPerson
8、 public static void main(String args) Person p1; p1= new Person(); Person p2 =new Person(); p1.age = 100; p1.shout(); p2.shout(); ,为了使用Person类,我们再创建一个测试类,在测试类的main方法中创建新的对象之后,我们就可以使用“ 对象名.对象成员 ”的格式,来访问对象的成员(包括属性和方法),当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。 对象名命名规范:与变量命名规范一致。,类的组织,可以将一个程序的所有类放在一个类文件中(两种情况)。
9、 可以将一个程序的所有类放在多个类文件中。 一个类文件中只允许一个类的修饰符为public,并且类名必须作为文件名。 编译运行上面的实例,对象的内存解析,代码区 public class TestPerson public static void main(String args) Person p1 = new Person(); Person p2 =new Person(); p1.age = 100; p1.shout(); p2.shout(); class Person int age; void shout() System.out.println(“oh,my god! I a
10、m “ + age); ,数据区,栈区,堆区,p1,p2,0,100,类是静态的概念,存储在代码区。 对象是new出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的值(除了静态变量),而方法只有一份,存储在代码区的类中,执行的时候才占用内存。,练习,1、在一个类文件中,首先定义一个二维空间中的点类,在该点类中提供可以计算点距原点距离的方法;然后创建一个点对象,打印出该点对象与原点之间的距离。 2、在一个类文件中,首先定义一个梯形类,在该梯形类中提供可以计算梯形面积的方法;然后在另一个类文件中创建这个梯形类的对象,并打印出该梯形对象的面积。,类与对象的总结,什么是类 类的定义格式 变量
11、的分类及作用域 对象的创建 如何使用类的成员变量和方法。,在上面的练习中我们定义一个点类和一个梯形类,但是我们创建的点对象的初始位置只能为原点,创建的梯形对象的初始大小只能为0。,构造方法,构造方法的作用:当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码,例如初始化成员变量的值。 构造方法的特征:所有类都具有构造方法,它的方法名与类相同的名称,并且不含返回值; 构造方法的格式: 修饰符 类名(参数列表) 注意: 1、在构造方法里不含返回值的概念是不同于“void”的。 2、构造方法只能在创建对象时通过new关键字来自动调用。 3、当没有
12、给类添加任何构造方法时,系统将自动给类添加一个构造方法:类名() 4、在一个类中可以有多个具有不同参数的构造函数,构造方法,例题:设计一个点类,使得这个类的对象在创建时具有不同的坐标。 思考:在完成上面例题的基础上,能不能通过new Point()创建点对象。如果不能,那么如何修改类后才能通过new Point()创建点对象。,练习,1、首先定义一个具有姓名、学号和年龄属性,具有一个初始化三个属性的构造方法和打印三个属性的方法的学生类;然后创建一个测试类生成一个年龄14岁、姓名为张三和学号为080401的学生,并打印出这些信息。,内存分析练习,TestCircle.java,构造方法总结,1、
13、构造方法的特征 2、构造方法的作用 3、构造方法的产生,一个类的成员变量和方法是如何使用的呢?,Static修饰符,1、static修饰符的使用 static修饰符可以修饰成员变量和方法,分别叫类变量(静态变量)和类方法(静态变量),没有被static修饰的变量和方法分别叫实例变量和实例方法。 2、类变量(静态变量)和类方法(静态变量)的引用 类名.类变量 类名.类方法 实例,static修饰符,静态变量和静态方法的特征: 1、不管类被实例化多少个对象,静态变量只有一个。 2、静态方法仅能调用其他的静态方法。 3、静态方法只能访问静态变量。 4、类方法不能以任何方式引用this 或super
14、。 5、实例方法中可以访问静态变量和静态方法。 实例,static修饰符,static代码块 static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。 实例: public class Test static System.out.println(111111); ,static练习,设计一个能够统计产生了多少个对象的类。,static总结,1、static的使用 2、static变
15、量和方法的引用和使用说明 3、使用static的好处:方便变量的访问和方法的调用;在一个类的多个实例之间共享数据。,static复习,在我们的计算机中存大量的文档,我们的系统是如何管理这些文件的呢? 利用Java进行大中型项目团队开发时,会产生大量类文件,并且可能出现类文件名同名的情况,如何解决这些问题呢?,包,包的作用: 1、为了便于管理大型软件系统中数目众多的类 2、解决类的命名冲突问题。 什么是包? 它的实质是目录,包,虽然各种常见操作系统平台对文件的管理都是以目录树的形式的组织,但是它们对目录的分隔表达方式不同。 例如 windows平台下的目录结构如: c:WINDOWSsystem
16、32DirectX linux平台下的目录结构如: /usr/bin 为了保证跨平台的特征,java中采用了“.”来分隔目录。在Java中已经包含了大量的工具包,用于提供各种功能。,系统定义的包(类库)-部分,包的引用,使用全路径: x = java.lang.Math.sqrt(3); 引用java.lang包中Math类的sqrt方法 使用 import语句: - import 包名1. .包名n.ClassName; 可以使用ClassName类 例如:import java.lang.Math; x=Math.sqrt(3); - Import 包名1. .包名n.*; 可以使用除子包
17、中的类外,该包中所有的类 例如:import java.lang.*; x=Math.sqrt(3);,创建包,第一步建立和包同名的目录。包和文件系统目录一一对应,有一个包,就有一个和其对应的文件系统目录。 第二步在类或接口所在文件的最前面声明类或接口所在的包。包的声明格式如下:package 包名1.包名2.包名n; 包名命名规范:包的名字都是由小写单词组成。但是由于每一名Java程序员都可以编写属于自己的Java包,为了保障每个 Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀。由于互联网上的域名称是不会重复的,所以程序员一般采用自己在互
18、联网上的域名称作为自己程序包的唯一前缀。 例如:.hnvc.sy,包的创建和引用,1、在D盘的mypackage目录下,创建一个.hnvc.sy包,在包中定义一个类,该类中有一个打印String类型成员变量的值方法,该String类型成员变量在创建该类的对象时被初始化。 2、在C盘的myprogram目录下,创建一个中创建一个类,在该类的main方法中创建第1题类的对象,并调用打印方法。,包的编译与执行,javac classpath “类路径” 要编译的类的完整路径 javac后面接二个参数,分别如上所示不同颜色 - 绿色部分指明要编译的类的完整路径,包括盘符、路径和文件名。 -红色部分指明
19、在要编译的类中,要使用的包所在的路径。classpath 是javac命令的一个选项,可以简写成cp。 java classpath “类路径” 要运行的类的完整名称 java后面接二个参数,分别如上所示不同颜色 - classpath :java命令的一个选项,可以简写成cp。 - 红色部分指明在要运行的类中,要使用的包所在的路径和要运行类所在包的路径。classpath 是javac命令的一个选项,可以简写成cp。 -绿色部分指明要运行的类的完整名称:包名.类名,练习,建立相应目录,编译并运行下列程序,在.hnvc.jsj包中建立如下Java程序 public class A public
20、 static void main(String args ) B b1=new B();/ B是abc.xyz包中的一个类 b1.print(); ,在包abc.xyz包中建立如下Java程序 public class B public void print() System.out.println(package test); ,jar包的生成,为了方便包的发布,我们可以将一个包中的所有文件制作成一个jar包(它相当于一个压缩包)。制作过程如下: 1、编写制作多个包并编译; 2、将多个包复制到同一个目录,并在该目录下建立一个META-INF目录,在该目录下建立一个MANIFEST.MF文件
21、,该文件的内容如下: Manifest-Version: 1.0 Created-By: 1.6.0_16 (Sun Microsystems Inc.) Main-Class: 主类(包括包名) (回车) 3、选中多个包目录和META-INF目录,将这些目录压缩成一个zip文件。 4、将zip后缀名更改为jar。 例题:将上面的练习制作成jar包。,练习,1、创建一个com.mydns.jsj包,在包中定义一个类,该类中有一个整数成员变量n和一个成员方法(计算1到n的累加和),以及一个构造方法用于初始化成员变量n。 2、创建一个net.mydns.output包,在包中定义一个类,该类有一个
22、方法调用1题中的成员方法,并打印出结果。 3、在包中创建一个类,在该类的main方法中创建第2题类的对象,并调用2题中的方法。 4、将上面的三个包制作成一个可执行的jar包。,包的总结,1、包的作用 2、包的创建 3、包的引用 4、包的编译和执行 5、jar包的创建,类的基本特性,继承性 封装性 多态性,如果我们想要设计两个类,一个是Person类,它具有身高,体重,年龄,姓名,性别,皮肤的颜色属性;一个是Student类,它具有身高,体重,年龄,姓名,性别,皮肤的颜色,学号,所在学校,班级属性。你如何设计呢?,继承性,继承是类与类之间的一种关系,我们一般将这些类分别
23、称为父类和子类,子类产生时将从父类中自动的获得一些东西。在Java中子类将自动拥有父类中的部分成员变量和方法。它是软件复用的一种方法。 Java中的所有的类都继承于Object类,具体见下图,继承性,Java中使用extends关键字实现类的继承,其语法规则为: class 子类名 extends 父类名 思考:我们前面自定义类是否有父类? 实例:创建一个“人”的父类,然后创建一个由这个人的类继承出来的“学生”类,最后测试学生类。 TestPerson.java 内存分析,练习,1、分析下面各类之间是否存在继承关系 (1)学院 学生 教师 (2)运动员 游泳运动员 球类运动员 射击运动员 (3
24、)球队 队员 队长 (4)人 手 脚 头 2、设计一个学生类Student,其属性有name(姓名)、age(年龄),具有show()方法用于输出属性信息。由Student类派生出本科生类Undergraduate,本科生类Undergraduate增加属性specialty(专业),并增加getSpecialty()方法用于输出该学生专业属性信息。最后生成一个本科生类的对象,并输出它的属性信息和专业信息。 3、子类是否继承了父类中的所有成员变量和方法,this,this 使用this关键字代表自身类的对象 使用this关键字引用成员方法 使用this关键字引用成员变量 在构造方法中,使用th
25、is()调用本类中的另外一个构造方法,只能放在第一句。,super,super 在子类的构造方法内部引用父类的构造方法 在子类中调用父类中的成员方法 在子类中调用父类中的成员变量,super和this的异同,1)super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句) 2)this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句) 3)super:它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数。) 4)this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同
26、名,这时需用this来指明成员变量名) 5)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。 6)super()和this()类似,区别是,super()从子类中调用父类的构造方法,this()在同一类内调用其它方法。 7)尽管可以用this调用一个构造器,但却不能调用两个。 8)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语
27、句的意义,编译器也不会通过。 9)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。,子类对象的实例化过程,子类对象的实例化过程实例,分析下列程序的输出结果 实例一 实例二 实例三,继承性,Java只支持单继承,不允许多重继承。 可以有多层继承,即一个类可以继承某一个类的子类,如类B继承了类A,类C又可以继承类B,那么类C也间接继承了类A。,对象的上转型对象,假设,A类是B类的父类,当我们用子类创建一个对象,并把这个对象的赋给父类的对象时,比如 A a; B b=new B(); a=b; 称这个父类
28、对象 a,是子类对象b的上转型对象。上转型对象具有如下特点: 1 上转型对象不能操作子类新增的成员变量(失掉了这部分属性),不能使用子类新增的方法(失掉了一些功能)。 2 上转型对象可以操作子类继承或重写的成员变量,也可以使用子类继承的或重写的方法。 3 如果子类重写了父类的某个方法后,当对象的上转型对象调用这个方法时一定是调用了这个重写的方法,因为程序在运行时知道,这个上转型对象的实体是子类。 注:不要将父类创建的对象和子类对象的上转型对象混淆。 可以将对象的上转型对象再强制转换到一个子类对象,这时,该子类对象又具备了子类所给的所有属性和功能。 不可以将父类创建的对象的引用赋值给子类声明的对
29、象。,对象的上转型对象,实例(内存分析:子类先给继承来的成员变量和方法分配空间,再自己的成员变量和方法分配空间) 练习,总结,1、什么是继承 2、如何进行继承 3、继承的目的是代码复用和实现类的多态性。 4、子类对象的实例化过程 5、对象的上转型对象,1、为了能看电视,我们是不是一定要了解电视的原理? 2、下面狗类的设计是否存在问题 class Dog float weight; ,封装性,封装性就是把对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节,包含两个含义: 把对象的全部属性和全部行为结合在一起,形成一个不可分割的独立单位(即对象)。 信息隐蔽,即尽可能隐蔽对象的内部细
30、节,对外形成一个边界或者说形成一道屏障,只保留有限的对外接口使之与外部发生联系。 封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的“交叉感染”,使软件错误能够局部化,大大减少查错和排错的难度。 在Java类的信息隐蔽通过访问权限提供,访问权限修饰符有:private、protected、public、省略不写(default、friendly)。,继承性补充,如果子类和父类在同一个包中,那么子类自然地继承了其父类中除private的成员变量和方法作为自己的成员变量和方法。 如果子类和父类不在同一个包中,那么子类只继承父类中pro
31、tected、public成员变量和方法作为子类的成员变量和方法。,封装性,在类的成员变量和方法前使用四个修饰符。四个修饰符的访问权限表示类中的某一属性和方法是否可以在同一类中、同一包中、同一包的子类中、不同包中和不同包的子类中进行访问。 访问分为通过类的对象访问和直接访问。 private:属性和方法只能在同一类中通过类的对象访问和直接访问。 缺省访问:属性和方法可以在同一类中通过类的对象访问和直接访问;可以在同一个包的其它类通过类的对象访问;可以在同一包的子类中通过类的对象访问和直接访问。(包级访问) protected:属性和方法可以在同一类中通过类的对象访问和直接访问;可以在同一个包的
32、其它类通过类的对象访问;可以在同一包的子类中通过类的对象访问和直接访问;可以被不同包中的子类直接访问,不能访问父类对象的成员变量和方法。(子级访问) public:属性和方法可以在任何地方通过类的对象访问。,封装性,例如:类Y和类Z继承自类X。类Z属于包P1,并且类X和类Y属于包P2。 (具体见访问权限文件夹),Package P2,Class Z,Package P1,Class X,Class Y,Class B,Class A,封装性,对于一个类的修饰只能采用public或不写(default),不能用protected和private修饰类。如在类的前面不写修饰符,那么另外一类中使用这
33、个类创建对象时,要保证它们是在同一个包中。,练习,1、如何解决狗类weight的问题?,总结,1、封装的作用是将类的属性和行为结合成为一个整体,并尽可能隐藏对象的内部细节。 2、public、protect、defalut、priavte四种修饰符的访问权限。 3、封装的目的是增强安全性和简化编程。,一天你的老板让对所有员工说:“在九点钟开始工作”。第二天九点钟,销售员开始销售工作,技术员开始技术工作。为什么老板不需要对销售人员说:“开始销售工作”,对技术人员说:“开始技术工作”,而他们九点开始了相应的工作呢?,多态性,多态性就是多种表现形式,具体来说,可以用“一个对外接口,多个内在实现方法”
34、表示。在Java中它分为如下二种形式: 对象多态性 方法的重载 方法的重写,对象多态性,对象的多态性主要指的是:子类和父类对象的相互转换关系。 向上转型:父类对象=子类对象 自动完成 向下转型:子类对象=(子类)向上转型对象 强制完成,方法的重写,子类可以继承父类的方法,但是由于子类有时具有自己特有的特征,造成由父类继承而来的方法在子类中不太适合,这样Java允许子类对父类的同名方法重写,也就是在子类中定义与父类具有相同名称、相同的参数表和相同返回类型的方法,但方法的功能不同。 实例 TestOverride.java,练习,请设计一个交通工具的类Vehicle,它有一个成员变量int wei
35、ght和一个public float calculateFee()方法。再设计Vehicle的两个子类:Truck和Boat两个子类重写父类Vehicle的方法:public float calculateFee()计算运费 Vehicle的运费计算公式:weight Truck的运费计算公式:weight*12.4 Boat的运费计算公式:weight*10 在上面三个方法中打印出计算结果。最后利用对象的多态性调用Boat对象的calculateFee()方法。,方法的重载,所谓方法的重载是指调用一个类中多个方法享有相同的方法名,但在执行时期可以根据其参数数量与类型来判断要调用此方法的哪一种
36、操作。 使用方法重载时需要注意以下几个方面: 区别在于:参数类型不同,或个数不同。 参数类型的区分度要足够,例如不能是同一简单类型,如:int ,long。 返回类型不能用来区分重载的方法。 实例:TestOverload.java,练习,一个矩形可用两个点表示,一个三角形可用三个点来表示,一个圆可用一个点和一个半径来表示。请创建一个类它能同样的方法名calArea,分别计算出的矩形、三角形和圆形的面积。完成类的设计后,测试该类。,总结,1、Java中多态的形式有几中,并说明它们的原理。 2、多态性的好处:多态通过分离“做什么”和“怎么做”,从另一角度将接口和实现分离开来。多态不但能够改善代码
37、的组织结构和可读性,还能够创建“可扩展的”程序,即无论在项目最初创建时,还是在需要添加新功能时,都可以进行扩充。 可扩展性:一个妇人养了一个宠物,当这个妇人逗宠物时,这个宠物就会高兴的叫。,通过前面的学习,我们可以知道类的成员变量的值可以重新赋值、一个类可以被继承、类的方法可以被重写。但是在有些情况下,如果我们不希望这些情况发生,那么通过什么办法可以解决呢?,final关键字,final修饰的变量的值不能够被改变 -修饰成员变量表示一个常量 -public static final NAME表示一个全局常量 -常量命名规范:全部采用大写字母,如果是由多个单词构成,可以用下划线隔开 final修
38、饰的方法不能够被重写 final修饰的类不能够被继承,上面的例子当中Animal类(p74)的enjoy()方法有用吗?,抽象类,抽象方法只需要声明,而不要实现。 含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须重写。 用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。 抽象不能被实例化。,练习,定义一个抽象类Shape,它包含一个抽象方法getArea(),这个抽象方法是要功能是计算对象的面积,从Shape类派生出Rectangle和Circle类。编写编写应用程序使用Rectangle类和Circle类。,电
39、脑中有主板和硬盘两种设备,硬盘连接在主板上,硬盘厂商是不是一定要等主板厂商生产出主板后,交给他们后才能生产硬盘呢? 为什么U盘、USB鼠标、USB键盘等设备都可以使用同一个计算机USB接口?,接口,接口(interface)就是方法定义和常量值的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有方法的实现。接口本质上是使用者与实现者之间一组约束的抽象描述。,接口的定义,格式: public interface 接口名 extends 父接口列表 常量; 抽象方法; 1、public接口可以被任何一个类使用,如果接口不加public修饰,就称为友好接口,友好接口
40、可以被同一包中的类使用。 2、接口命名规范:和类的命名规范一样,建议第一个字母为I(大写字母i)。 3、接口也可以从其它接口派生而来与类不同,一个接口允许从多个父接口派生而来 4、在接口中只能定义常量和抽象方法,并且必须是public,在定义中允许省略常量前面的public、final和static修饰符,也允许省略抽象方法前面的public和abstract修饰符。,接口定义,实例: interface IstudentInfo /学生情况接口 int year=2002; int age(); ,接口的实现,类如何实现一个接口: 修饰符 class 类名 implements 接口名1,接
41、口名2, / 实现接口中的方法 1. 一个类如果要实现一个接口,就必须实现接口中的所有方法。一个类如果只是实现接口中的部分方法,则一定要标明这个类为抽象类。 2.一个类在实现某接口的抽象方法时,必须使用完全相同方法头。如果所实现的方法与抽象方法有相同的方法名和不同的参数列表,则只是在重载一个新的方法,而不是实现已有的抽象方法 3.接口的抽象方法的访问限制符都已制定为public,所以类在实现方法时,必须显式地使用public修饰符,否则将被系统警告为缩小了接口中定义的方法的访问控制范围。 4.接口中的常量:类在实现接口的同时,还继承了接口中的常量,因此可以作为类的静态成员常量直接使用。,接口实
42、现,class Stu1 implements IstudentInfo /实现学生情况接口 String name; int birthyear; /类自己的成员变量 public Stu1(String n1,int y) name = n1; birthyear = y; public int age() /实现接口的方法 return year - birthyear; public void output() /类自己的成员方法 System.out.println( + + this.age()+岁); ,接口的使用,1、接口不能实例化。 2、任何实现该接口的类的对象可以赋给接口变量,但通过接口变量只能调用接口函数和接口常量,接口变量不能访问对象的其它函数和成员变量,包括公开变量和私有变量。 例如: Istu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 47023-2026信息技术脑机接口参考架构
- 陕西航空职业技术学院《新闻主播实践》2024-2025学年第二学期期末试卷
- 解析:2024届陕西省安康市高新中学、安康中学高新分校高三5月模拟预测文综试题-高中政治(原卷版)
- 矿山提升设备操作工安全实操模拟考核试卷含答案
- 铁合金转炉冶炼工安全综合评优考核试卷含答案
- 注聚工岗前健康知识考核试卷含答案
- 电视调频天线工岗前诚信考核试卷含答案
- 软膏剂工班组安全水平考核试卷含答案
- 水(油)压机锻造工安全培训测试考核试卷含答案
- 养鸡工岗前客户关系管理考核试卷含答案
- 福建省龙岩市2025-2026学年高二上学期期末教学质量检查语文试卷(含答案)
- 2026年物流师物流管理与供应链优化模拟试题
- 2026春统编版小学道德与法治二年级下册每课教学设计(含目录)新教材
- 2025~2026学年江苏省南京市七年级上学期期末数学模拟试卷
- 工业机器人设备营销课件
- 2025版《中国胰腺癌整合诊治指南》
- 2025年中国科协所属单位招聘笔试真题
- 2026届新高考语文三轮冲刺复习古代诗歌阅读命题解读
- 2025-2026学年湘美版(新教材)小学美术二年级第二学期教学计划及进度表
- 2026年度烟花爆竹单位安全教育培训计划培训记录(12个月带内容模板)
- 2025年中职(畜禽生产技术)养殖技术综合测试题及答案
评论
0/150
提交评论