第三课 类对象接口与包1.docx
《第三课 类对象接口与包1.docx》由会员分享,可在线阅读,更多相关《第三课 类对象接口与包1.docx(17页珍藏版)》请在冰豆网上搜索。
第三课类对象接口与包1
第三课类、对象、接口与包
(1)
授课时数:
✧2课时
授课内容:
✧类概念、类定义格式
✧类属性定义、类方法定义格式
授课目的:
✧理解类、包、对象的概念
✧熟练掌握类定义、成员属性定义、成员方法定义中访问控制符和修饰符的使用
✧理解抽象类、抽象方法的含义
✧理解最终类、最终方法、最终属性含义
✧理解静态属性、静态方法的含义
授课重点及难点:
✧类、对象、属性、方法的定义
✧理解包的概念;如何编译及运行定义了包名的源文件;包的引用
✧public、private、protected、friendly四种访问权限及修饰类、方法时的适用范围
✧Java类的编写
教学方法:
✧问题牵引教学,主要采用提出问题,启发学生积极思考、分析、讨论,寻找解决途径和问题的答案的方法。
✧采用演示、讲解和练习等方式,使学生在编程实践中加深对概念的理解,熟练掌握相关的技术细节。
✧配套程序练习,巩固所学知识。
教学过程设计:
一、类概念、类定义
1、通过类比、举例讲解对类、对象的理解。
提问:
请同学举出现实生活中的一些类、对象。
★类描述了同一类对象都具有的数据和行为。
如学生类
★创建一个新类,就创建一种新的数据类型。
★类是一个模板。
★对象是在其类模型基础上构造出的,是类的具体实例。
2、讲解类的命名规范,强调要养成好的命名惯例。
类名可以是任意的Java标识符,一般约定,类名的第一个字母大写,后续的每个有意义的单词的首字母都要大写。
3、类定义程序举例。
ClassAndObject.java
classEmpInfo{
Stringname;
Stringdesignation;
Stringdepartment;
publicEmpInfo(StringeName,StringeDesign,StringeDept){
name=eName;
designation=eDesign;
department=eDept;}
voidprint(){System.out.println(name+"isa"+designation+"at"+department+".");}
}
publicclassClassAndObject{
publicstaticvoidmain(Stringargs[]){
EmpInfoe1=newEmpInfo("RobertJava","Manager","Coffeeshop");
EmpInfoe2=newEmpInfo("TomJava","Worker","Coffeeshop");
e1.print();
e2.print();
}
}
运行结果为:
提问:
该程序类名是什么,类体中定义了几个成员变量(有时称为属性),几种成员方法?
归纳类的定义方式?
成员变量和成员方法的定义方式?
完整的Java类定义:
[package说明]
[import说明]
[访问控制符][修饰符]classClassName[extendsSuperClassName][implementsInterfaceNameList]
{
[类属性定义];
[构造方法说明];
[类方法说明];
}
说明:
◆package和import
包是一组相关的类和接口的集合。
包的作用
将类和接口分装在不同的包中,可以避免重名类的冲突;限定包之间类的访问权限,更有效地管理众多的类和接口。
小提示:
每个包都创建一个新的命名空间,因此不同包中的类名不会冲突。
这一点和C++中命名空间的作用相似。
包的定义
包的定义通过关键字package来实现的,package语句的一般形式:
package包名;
若需将类放在包中,只需在程序的第一行写上:
package包名;
存放位置
创建包就是在当前文件夹下创建一个子文件夹,以便存放这个包中包含的所有类的.class文件。
如果包名中含有符号“.”,例如“MyPackage.MyPackage1”表示在当前目录下子文件夹MyPackage,MyPackage1目录为MyPackage目录子文件夹,.class文件存放在此文件夹下。
包的引用
将类组织成包的目的是为了更好地利用包中的类。
一个类如果需要引用其他包中的非public类,可以采用如下方法:
(1)加载需要使用的类
在程序的开始部分利用import语句加载所需的类。
如:
importMyPackage.Circle;
(2)加载其他类
利用import语句可以加载整个包中的类。
如:
importMyPackage.*;
Java实例——包的引用
packagebag;
//创建包bag,将类放入bag包中
publicclassX1{
intx,y;
publicX1(inti,intj){
this.x=i;
this.y=j;
System.out.println("x="+x+""+"y="+y);
}
publicvoidshow(){
System.out.println("ThisclassisaX1");
}
}
packagebag;
//创建包bag,将类放入bag包中
publicclassX2{
intm,n;
publicX2(inti,intj){
this.m=i;
this.n=j;
System.out.println("m="+m+""+"n="+n);
}
publicvoidshow(){
System.out.println("ThisclassisaX1");
}
}
importbag.X1;//分别引用类X1
importbag.X2;//分别引用类X2
publicclassPack{
publicstaticvoidmain(Stringargs[]){
X1aa=newX1(4,5);
aa.show();
X2bb=newX2(10,20);
bb.show();
}
}
◆访问控制符
访问控制符的作用是说明被声明内容(类、属性、方法和构造方法)的访问权限,合理的使用访问控制符,可以通过降低类和类之间的耦合性(关联性)来降低整个项目的复杂度,也便于整个项目的开发和维护。
在Java语言中访问控制权限有4种,使用三个关键字进行表达,依次如下:
public、protected、private、无访问控制符。
类定义的访问控制符只有两个:
无访问控制符和public。
若无任何访问控制符,则该类只能被本包中的其他类使用。
若被public修饰,则该类是公共类,能被项目文件中所有类访问,另外,一个Java源程序内最多只能有一个public类,且文件名必须与类名同名。
◆修饰符
修饰符的作用是让被修饰的内容具备特定的功能,在程序中合理使用修饰符可以在语法和功能上实现很多需要的效果。
Java语言中的修饰符主要有5个:
static、final、native、abstract和synchronized。
对类的修饰符有两种abstract或final。
abstract修饰的类是抽象类,它可以派生出若干子类,其特点:
第一,抽象类不能实例化对象;第二,抽象类可以有构造方法、普通成员;第三,如果一个成员方法是抽象方法,那么这个类必须要说明为抽象类,即在定义类时用abstract修饰。
例如:
abstractclassPhoneCard
{
doublebalance;
voidperformDial(){}
}
以上类PhoneCard虽然没有抽象方法,但属于抽象类。
abstractclassPhoneCard
{
doublebalance;
voidperformDial();
}
以上抽象类PhoneCard有抽象方法performDial()。
final修饰的类是最终类,特点就是该类不能被继承,即不能有子类了。
被定义为final的类通常是一些有固定作用的、用来完成某种标准功能的类,如Java系统定义好的用来实现网络功能的InteAddress、Socket等类都是final类。
另外需要注意abstract和final不能同时使用,理由明显。
◆“[extendsSuperClassName]”,extends用来表明新创建的类继承哪个类,被继承的类称为此类的父类。
当然这个地方只能出现一个父类名。
◆“[implementsInterfaceNameList]”用来表明这个类实现了哪些接口,接口名可以有多个。
特别注意:
关于类的定义,在Java语法中,一个源代码内部可以编写多个类,在实际项目中,不推荐进行这样的编码,主要原因是不方便类源代码的查找,而推荐每个源文件内部只声明一个类的形式。
例如:
/**
*一个类内部声明多个类
*/
publicclassTwoClassInOneFile{
intn=0;
publicvoidmethod(){}
}
classAnotherClass{
charc;
publicvoidt(){}
}
这样的源代码,在编译时,将生成两个独立的class的文件:
TwoClassInOneFile.class和AnotherClass.class,这样的结构不是内部类。
二、完整的java类属性和方法定义
类属性定义格式:
[访问控制符][修饰符]typevarName;
类方法格式:
[访问控制符][修饰符]([])[throws]
{}
说明:
1.访问控制符
属性声明、构造方法声明和方法声明的访问控制符可以是以下4种中的任何一个。
这4个访问控制符的权限作用如下表所示:
访问控制符
同一个类内部
同一个包内部
不同包中的子类
不同包中的非子类
public
Yes
Yes
Yes
Yes
protected
Yes
Yes
Yes
No
无访问控制符
Yes
Yes
No
No
private
Yes
No
No
No
2.修饰符
这里首先讲解abstract、static、final和native的作用。
static修饰符
static关键字的中文意思是静态的,该修饰符可以修饰成员变量,成员属性和成员方法。
使用该关键字修饰的内容,在面向对象中static修饰的内容是隶属于类,而不是直接隶属于对象的,所以static修饰的成员属性一般称作类属性,而static修饰的方法一般称作类方法。
另外,static还可以修饰代码块,下面进行详细的介绍。
静态属性
静态属性的存储和非静态属性的存储不同,在Java虚拟机内部,类在加载到内存时,静态属性只初始化一次,而且无论创建多少个该类的对象,静态属性的存储在内存中都是独立于对象的,也就是Java虚拟机单独为静态属性分配存储空间,所以导致所有的对象内部的静态属性在内存中存储时只有一个空间。
这样就导致使用任何一个对象对该值的修改都是使该存储空间中的值发生改变