JAVA程序设计教学课件第四章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 当创建子类对象时,首先执行超类构造 函数,然后执行子类的构造函数。例如:
30
class point{ // 程序4-8 int x, y; point(int x, int y){ this.x=x; this.y=y; System.out.println("父类构造函数被调用!"); }
} class circle extends point{
4.6 关键字this(续)
• this指代对象可以用于解决实例变量被局 部变量屏蔽的问题。 例如:
class point { int x , y; void init(int x, int y ){ this.x=x; this.y=y; }
}
22
4.6 关键字this (续)
• Java中的级连调用,仍是指代当前对象 的this。例如:
任何对象 : p1 = null ; • 每个对象都有自己的变量,改变一个对象的
实例变量并不影响到另外一个对象。例如:
8
class point { // 程序4-1 int x , y; void init(int a, int b ){ x=a; y=b;
} } public class twoPoint{
• 对象是由数据和方法紧密结合的一个封装 体,具有信息隐藏的能力。
• 对象可以通过方法(函数)与其它对象进 行通信,但并不知道这些方法的实现细节。
3
4.1.2 Java和C编程思想的区别
• C是结构化的编程语言,以函数为编程单 元,程序员把注意力集中在编写函数上。
• Java是面向对象的编程语言,以类为编程 单元,程序员的精力集中在对类的设计上。
• 方法重载的一个误区是靠返回值区别重 载,即定义多个方法,它们的名称和形 参类型完全相同,但返回值不同,这是 不允许的。
19
4.6 关键字this
• this指代对象 ,例如:
20
class IntVector { // 程序4-6 int v[ ]; boolean equals(IntVector other) { if (this == other) return true; return false; }
称之为方法的特征。
10
4.2 方法(续)
• 调用方法的格式:引用. 方法名(参数表); 例如: point p1=new point( ),p2=new point( ); p1.init(10,20); //仅对p1对象的x和y进行赋值
11
4.3 实例变量和局部变量
• Java中的变量分为两种:类内定义的实 例变量,方法中定义的局部变量。
int radius; circle(int r, int x, int y){
super(x, y); radius=r; System.out.println("子类构造函数被调用!"); } }
public class testInherence { public static void main(String args[ ]) { circle c1;
c1=new circle(1,1,1); } }
再次讨论构造函数
• 若父类没有定义构造函数,那么对父类数 据的初始化将采用系统缺省的构造函数; 例如:class point{ int x, y; }
System.out.println("x = "+ p2.x +" y= "+p2.y);
}
}
4.2 方法
• 方法是一个功能模块 ,类似C中的函数; • 方法和实例变量都必须定义在类内,方法
是类的功能接口 ; • 定义方法的原则:方法应当只执行单一的
任务,并且方法名能有效地表达该任务; • 方法的返回值类型、方法名和参数表共同
++x;
System.out.println(" x is :"+x);
}
void printInstanceVar( ){
System.out.println("\n x is :"+x);
x*=10;
System.out.println(x is :"+x);
}
}
public class testInstanceVar {
} }
4.6 关键字this (续)
• 在构造函数内部使用this,它用于指代另外 一个构造函数,但不能指代非构造函数。例 如:class point {
int x, y;
point( ){ this(-1,-1); } point(int a, int b){ x=a; y=b; } }
27
4.7 继承
}
time setMin(int m) { min=((m>=0 && m<60)? m: 0); return this ;
}
time setSec(int s) { sec=((s>=0 && s<60)? s: 0); return this ;
}
String tostring( ){ return hour+":"+min+":"+sec ;} }
} class testIntVector {
public static void main(String args[ ]){ IntVector t1=new IntVector( ), t3=new IntVector( ), t2=t1;
System.out.println(t1.equals(t2)); System.out.println(t3.equals(t2)); } }
动创建一个缺省的、不带参数的构造函数。 • 构造函数是在对象创建之后,new操作完
成前被调用的。
16
class point { // 程序4-3
int x, y;
point(int a, int b){
x=a;
y=b;
}
}
思考:无构造函数怎么办?
public class createPoint { public static void main(String args[ ]){ point p= new point(10,20); System.out.println(p.x +" "+p.y);
6
4.1.3 如何定义类(续)
class point { // Object类的子类 int x , y; void init(int a, int b ){ x=a; y=b; }
}
7
4.1.4 对象和引用
• 对象是客观存在的变量,对象的引用就是对 象的名字,例如:point p1;
• 创建对象:p1=new point( ); • 一个对象可以有多个别名 ; • 将一个变量设置为null,表明该变量不代表
本章主要讲述的内容
• 类的定义和使用; • 方法的定义和使用; • 实例变量和局部变量; • 构造函数; • 方法的覆盖和重载; • 关键字this的用法;
• 继承的概念和应用; • 组合与继承; • 抽象方法和抽象类; • 对象类型转换;
• 访问权限限制符: public、private、 protected。
4.3 实例变量和局部变量(续)
• 实例变量属于对象,它描述了对象的属 性,随着对象的存在而存在;
• 局部变量是随着方法的调用而存在,一 旦方法调用结束,局部变量也就消亡了。
15
4.4 构造函数
• 构造函数的功能是在创建对象时初始化对 象的实例变量;
• 构造函数与类具有相同的名字; • 构造函数没有返回值; • 如果类中没有定义构造函数,编译器会自
• 在同一个作用域内,不允许定义两个同 名的局部变量。
• 局部变量可以掩盖实例变量。
ห้องสมุดไป่ตู้12
class loc { // 程序4-2
int x=1;
// 实例变量
void printLocVar( ){
int x=25;
// 局部变量
System.out.println("\n x is :"+x);
return-type methodName1( parameter-list){ method-body;
} }
5
4.1.3 如何定义类(续)
• 系统类Object是整个类层次结构中的根。 • 类内定义的变量称为实例变量,函数称
为方法; • Java将类的定义和类的实现放在一起,
便于系统维护。例如:
public class timeToString extends Applet{ private time t;
public void init( ){ t=new time( );
}
public void paint(Graphics g) { t.setHour(18).setMin(30).setSec(20); g.drawString(" time:"+t.tostring( ),25,45);
• 对象将实例变量(instance variable)和对 数据的操作(即方法)约束在一起,类似 一个独立的程序,易于扩充,易于维护, 代码可复用。
4
4.1.3 如何定义类
• 类是对象的模板,它定义了对象的结构 和操作数据的方法。定义格式如下:
class className extends superClassName{ type instance-vairbale1;
} }
4.5 方法重载
• 方法重载是在一个类中定义二个或多个同 名的方法,但方法的参数个数或类型不完 全相同;例如:
class point { int x, y;
point(int a, int b){ x=a; y=b; }
point( ){ x=-1;y=-1;}
}
18
注意以下两点
• 一旦定义了构造函数,Java就不能再调 用系统缺省构造函数;
}
class circle extends point{ int radius; circle(int r, int x, int y){ radius=r; this.x=x; this.y=y; }
}
关键字super
• 构造函数是一种特殊的方法,子类不能 继承超类的构造函数,但子类构造函数 可以通过super调用超类的构造函数。
// 程序的主类
public static void main(String args[ ]){
loc obj=new loc( );
int x=5;
// 局部变量 x
} }
System.out.println(" x is :"+x); obj.printLocVar( ); obj.printInstanceVar( ); System.out.println(" x is :"+x);
23
// 程序4-7 import java.awt.*; import java.applet.*;
class time{ private int hour, min, sec;
time( ) { setHour(0); setMin(0); setSec(0); }
time setHour(int h) { hour=((h>=0 && h<24)? h: 0); return this ;
• 继承是软件重用的一种形式 ,可以提高系 统的性能;
• Java不支持多继承,但支持多接口; • 子类的对象也是其超类的对象,反之未必; • 继承具有传递性。 继承语法: class className extends superClassName{
各实例变量和方法的定义 }
28
class point{ int x, y; point(int x, int y){ this.x=x; this.y=y; } point( ){ this.x=0; this.y=0; }
public static void main(String [ ]args){ point p1= new point ( ), p2= new point ( );
p1.x=10;
p1.y=20;
p2.x=30;
p2.y=40;
System.out.println("x = "+ p1.x +" y= "+p1.y);
1
4.1 类与对象
• 在Java程序中,除原子类型的变量以外 都是对象,连Java程序本身也不例外。
• 类是面向对象程序设计的基础,OO始终 是围绕着对象的封装性、继承性和多态 性展开讨论的。
2
4.1.1 类与对象的区别
• 类是一个抽象的概念,对象是一个具体的 概念。
• 类是在一组对象的基础上,通过抽象和概 括获得的一个概念。
相关文档
最新文档