第三章 面向对象编程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
14
面向对象的应用举例(1)
程序BirthDate.java :
public class BirthDate { private int day; private int month; public int year; public void setDay(int d) { day = d; } public void setMonth(int m) { month = m; } public void setYear(int y) { year = y; } public int getDay() { return day; } public int getMonth() { return month; } public int getYear() { return year;} public void show(){ System.out.println(day + "-" + month + "-" + year); } }
10
默认的构造方法(1)
Java语言中,每个类都至少有一个构造方法;
如果类的定义者没有显式的定义任何构造方法, 系统将自动提供一个默认的构造方法:
– 默认构造方法没有参数
– 默认构造方法没有方法体
Java类中,一旦类的定义者显式定义了一个或多 个构造方法,系统将不再提供默认的构造方法;
11
默认的构造方法(2)
2Байду номын сангаас
面向对象的思想概述
1. 面向对象的编程思想力图使对计算机 语言中对事物的的描述与现实世界中 该事物的本来面目尽可能的一致。
2. 类(class)和对象(object)是面向对象 方法的核心概念。类是对一类事物描 述,是抽象的、概念上的定义;对象 是实际存在的该类事物的每个个体, 因而也称实例(instance)。
类的定义:public class Person {
private int age; public void setAge(int w) { age = w; }
}
等价于: public class Person{
private int age public Person() {} public void setAge(int w) { age = w; }
22
实 例 验 证 … …
不 同 包 不 同 类
23
package accessdemo.otherpack; import accessdemo.SuperClass; public class OtherPackOtherClass { public static void main(String args[]) { SuperClass s=new SuperClass( ); s.testPublic(); s.testProtected(); s.testFriendly(); s.testPrivate(); } }
• 使用下列语法可创建对象: • 关键字 new 通常称为创建运算符,用于分 配对象内存,并将该内存初始化为缺省值。 • 一旦 new 完成分配和初始化内存,它就将 调用构造函数来执行对象初始化。
class FruitDemo { public static void main(String args[]){ Fruit f = new Fruit(true,false,50.0F); } 创建对象 }
声明并创建一个Person类的对象,将该对象命名为a:
Person a = new Person(); a.setAge(36);
调用对象a中的方法:
7
声明属性
语法格式:
[< modifiers>] type < attr_name> [=defaultValue] ;
举例:
public class Person{ private int age; public String name = “Lila”; }
实 例 验 证 … …
同 一 包 子 类
21
package accessdemo; import accessdemo.SuperClass; public class SamePackSubClass extends SuperClass { public static void main(String args[ ]) { SamePackSubClass s1=new SamePackSubClass( ); s1.testPublic( ); s1.testProtected( ); s1.testFriendly( ); s1.testPrivate( ); } }
3
类和对象(1)
• 对象表示现实世界中某个具体的事物。 • 抽象是从特定的实例中抽取共同的性质以形 成一般化概念的过程。 • 对象具有两方面的含义:
在现实世界中: 是客观世界中的一个实体 在计算机世界中:
是一个可标识的存储区域
4
类和对象 (2)
• 类是具有共同属性 和行为的对象的抽 象。 • 类可以定义为数据 和方法的集合。 • 类也称为模板,因 为它们提供了对象 的基本框架。
5
封装的实体=数据+方 法 数据或变量
类
方法
抽 象
实 例 化 属性或状态
对象
操作或行为
创建类
class name { type variable1; … type variableN;
在类中,属性是通过成员变 量体现的,而操作是用成员 函数(又称为方法)实现的。
Java中定义类的通用格式:
成员变量(对象属性)
13
练习
分析并编译、运行下面的源文件,体会类的定义、对象的创建、 对象成员方法的调用、类的定义和应用程序在源文件结构上的不 同;
//源文件A.java
//源文件Test.java
public class A { public void m1() { System.out.println("hi"); } } public class Test { public static void main(String[] args) { A hello=new A(); hello.m1(); } }
• 举例:
public void setdate(int day, int month, int year){ day=23; month=7; year=2003; }
9
构造方法
• 构造函数名称与类名称相同 • 构造函数没有返回类型 • 其任务是在创建对象时初始化其内部状态
class Fruit { boolean seedLess; boolean seasonal; float price; Fruit(boolean seed, boolean season, float p) { seedLess = seed; seasonal = season; price = p; } }
}
应用举例:public class Test{
public static void main(String args[]){ Person d = new Person() ; d.setAge(120); }
}
12
创建对象
new 构造函数
当创建一个类时,只是 创建了一种新的数据类 型。对象是类的一个实 例。
package accessdemo; public class SuperClass { public void testPublic( ) {System.out.println("a public method in superclass");} protected void testProtected( ) {System.out.println("a protected method in superclass");} void testFriendly( ) {System.out.println("a friendly method in superclass");} private void testPrivate( ) {System.out.println("a private method in superclass");} public static void main( String args[ ] ) { SuperClass sc=new SuperClass( ); sc.testPublic( ); sc.testProtected( ); sc.testFriendly( ); sc.testPrivate( ); } }
17
关于访问权限的习题测试
下题每空5分,测测您的分数:
calss private use
同一类 同包 不同类 同包 子类 不同包 子类 不同包 不同类
18
friendly
Y
protected
Y
public
Y
Y
N
N N N
Y
Y N N
Y
Y
Y
Y
Y
N
Y
Y
实 例 验 证 … …
在 同 一 个 类 中
19
16
Java中的访问修饰符
Java中共有四种访问修饰符:
1、public :完全公开,没有类或包的限制
2、protected:强调继承关系,没有包的限制
3、default:有包的限制,没有类的限制,对于同一包
中的类来说,相当于public修饰符。也可叫做package private 4、private:有包的限制,同时也有类的限制,只能被 同一个类中的成员函数或内部类访问。
第三章
面向对象的编程
类设计
本章知识要点: 定义继承、多态、重载、覆盖和虚拟方法调用 使用访问修饰符protected和“友元包” 描述构造器和方法重载的概念 描述完整的对象构造和初始化操作 在java程序中识别下列内容
重载方法和构造器 使用this来调用重载的构造器 覆盖方法 调用超类方法 父类构造器 调用父类构造器
15
面向对象的应用举例(2)
程序ObjectOperating.java :
public class ObjectOperating { public static void main(String args[]) { BirthDate b = new BirthDate(); b.setDay(25); b.setMonth(12); b.setYear(2003); b.day = 2; b.year = 2003; b.show(); } }
实 例 验 证 … …
同 一 包 不 同 类
20
package accessdemo; import accessdemo.SuperClass; public class SamePackOtherClass { public static void main(String args[]) { SuperClass s=new SuperClass(); s.testPublic(); s.testProtected(); s.testFriendly(); s.testPrivate(); } }
type methodname1(parameter-list){ //方法体 } … type methodnameN(parameter-list){ //方法体 } }
6
成员方法 (对象行为 或操作)
类和对象举例
定义一个类:
class Person { int age; int getAge() { return age; } void setAge(int i){ age = i; } }
实 例 验 证 … …
不 同 包 子 类
package accessdemo.otherpack; import accessdemo.SuperClass; public class OtherPackSubClass extends SuperClass { public static void main(String args[]) { OtherPackSubClass s1=new OtherPackSubClass(); s1.testPublic(); s1.testProtected(); s1.testFriendly(); s1.testPrivate(); } }
8
定义方法
• 定义方法的一般格式:
发往某个对象的消息对应于 一个方法调用。作为对消息 的响应,对象将执行一个类 似于过程体的方法。方法是 包含在类中的函数。
[access] type methodname1([parameter-list]){ //方法体 }
修饰符, 可选 返回类型 方法名称 参数列表, 可选