当前位置:首页 >> 理学 >>

第4章类、对象和接口_图文

第4章类、对象和接口
4.1面向对象编程 4.2面向对象的概念 4.3在Java中实现类 4.4 this 关键字 4.5 构造方法 4.6 包

回顾
? Java 中的数据类型分为两个类别:原始数据类型、引用 数据类型 ? 变量是存储数据的基本单元 ? 数据转换有两种类型:自动类型转换和强制类型转换 ? 数组用于将相同数据类型的多项数据存储在连续的内存 单元中 ? Java 提供了一组丰富的运算符 ? Java 支持以下控制语句编程结构:
? if - else ? switch ? for ? while ? do - while

目标
? 理解对象

? 理解类
? 理解抽象和封装

? 理解对象与类之间的关系
? 掌握包的创建和导入

4.1面向对象编程
面向对象是一种新兴的程序设计方法, 或者是一种新的程序设计规范(paradigm), 其基本思想是使用对象、类、继承、封装、消息 等基本概念来进行程序设计。 从现实世界中客观存在的事物(即对象)出发 来构造软件系统,并且在系统构造中尽可能运用 人类的自然思维方式。

面向对象的第一个原则是把数据和对该数据的操作都封装在一 个类中,在程序设计时要考虑多个对象及其相互间的关系。有 些功能并不一定由一个程序段完全实现,可以让其它对象来实 现。而面向对象的另外一个好处是实现代码的重复使用。 在一家装修公司,有经理、业务员、设计人员和施工人员。 张三=经理.招聘业务员(); 李四=经理.招聘设计人员(); 王五=经理.招聘施工人员(); 项目=张三.获得项目() 设计方案=李四.设计(项目); 完成的项目=王五.施工(设计方案);

下面是一个面向过程的求正整数最大值的程序: //最大值maxSoFar的初始值为0 double maxSoFar=0.0,price=1.0; while(price>0) { if (price>maxSoFar) maxSoFar=price; String input=JOptionPane.showInputDialog ("Enter the next price"); //把字符串input转换成整数price price=Double.parseDouble(input); } //打印最大值maxSoFar System.out.println("The maximum is "+maxSoFar);

下面是一个面向对象的求正整数最大值的程序
import javax.swing.JOptionPane; import java.lang.Double; class Max { double maxSoFar,price=1.0; public Max() {maxSoFar=0;} public void updateMax(double price) { if(maxSoFar<price) maxSoFar=price; } public double getPrice() { String input=JoptionPane.showInputDialog (“Enter the next price”); price=Double.parseDouble(input) return price; } public double getMax() {return maxSoFar; } }

public class MyMax { public static void main (String args[]) { Max max=new Max( ); //max是类Max的一个对象
double price=0;

while(price>0){ max.updateMax(price);//对象max调用updateMax方法,更新最大值 price=max.getPrice(); }
System.out.println("The maximum is "+max.getMax( )); } }

面向对象
1. 所有的东西都是对象。 2. 程序是一大堆对象的组合。 3. 每个对象都有自己的存储空间。

4. 每个对象都属于某个类。
将对象想象成为一种新型变量,它保存着数据,而且还 可以对自身数据进行操作。例如类Max中保留着数据的 最大值,同时还有方法updateMax(price)根据新加入的 price值产生最新的最大值,还有getMax()方法返回数 据的最大值。

面向对象
1. 所有的东西都是对象。 2. 程序是一大堆对象的组合。 3. 每个对象都有自己的存储空间。

4. 每个对象都属于某个类。
通过消息传递,各对象知道自己应该做些什么。如果需要让对象 做些事情,则须向该对象“发送一条消息”。具体来说,可以将 消息想象成为一个调用请求,它调用的是从属于目标对象的一个 方法.例如: max.updateMax(price); 就是向对象max发出 的用price修改最大值的一条消息

面向对象
1. 所有的东西都是对象。 2. 程序是一大堆对象的组合。 3. 每个对象都有自己的存储空间。

4. 每个对象都属于某个类。
每个对象可容纳其它对象,或者说通过封装现有的对象, 可以产生新型对象。因此,尽管对象的概念非常简单,但 是经过封装以后却可以在程序中达到任意高的复杂程度。

面向对象
1. 所有的东西都是对象。 2. 程序是一大堆对象的组合。 3. 每个对象都有自己的存储空间。

4. 每个对象都属于某个类。
每个对象都是某个"类"的 一个"实例"。

面向对象编程
OOP 对软件的设计有重大影响的几个观点 (1)创建复杂的软件系统, 必须首先建立书面的系统工作模型. 如同建筑物的设计图纸. (要求上机之前做好准备)

(2) 算法与数据结构 程序设计=算法+数据结构 算法主要对数据进行处理(精心设计),
数据结构就是数据的组织(设计数据之间的关系).

对于同一个的问题, 如果数据组织恰当, 对数据的处理就会相当简单. 因此

l 要设计出好的程序, 除了掌握好一种语言外(语言基础), 还必须了解一些常用的算法和数据结构 l 在结构化的程序设计中, 算法和数据结构是分离的,容易导致 算法与数据结构结合的 困难或不一致.

(3)面向对象的程序设计模式 对象+消息, 追求现实问题空间与 软件解空间的一致或近似。 解决了分析、设计和实现脱节问题.

在结构化的分析与设计中, 给用户的分析结果和 供设计的分析结果 至少在表达形式上是不一致的; 在面向对象的程序设计中,这两种形式得到了统一。 问题域中的对象一般能够保持相对稳定。 问题域的功能随着时间的推移,必定不断发生变化, 但其中的对象却保持相对稳定。 这有利于程序的维护和演化

面向对象语言与面向对象程序设计的学习方法 面向对象程序设计语言: 适合网络应用的有Java语言(纯面向对象); c++混合编程语言(结构化和面向对象), small talk 用于面向对象理论研究. 面向对象程序设计的学习方法: 首先学习面向对象的理论, 再学习面向对象的程序设计语言

模块
软件可以划分为若干个可以单独命名和编址的部 分,每一部分被称为一个模块。
模块化的作用是: 能够有效地分解和处理复杂的问题,能够被有效 地管理和维护软件.在结构化的程序设计中,可以 把一个函数叫做一个模块;在面向对象的程序设计 中,一个对象就是一个模块.

4.2 面向对象的概念
? 现实中的一切事物皆为对象

对象是系统中用来描述客观事物 的一个实体,它是构成系统的一 个基本单位。一个对象由一组属 性和对这组属性进行操作的一组 服务组成。

对象 是客观世界中具有可区分性的、 可以唯一标识的逻辑单元, 是数据和操作的封装体. 对象的属性是描述对象特征的数据。 对象的状态是对象的属性值的集合。 对象的行为是对象所能执行的活动;

对象的示例
收银员对象 状态 顾客对象

姓名:布兰尼 职衔:收银员 年龄:35 体重:60千克 操作: 收款 打印帐单

顾客 姓名:朱丽叶 年龄:28 体重:52千克
操作: 购买商品

行为

属性?

消息
“消息指一个对象为执行某项特定操作而向另一个 对象发送的请求”

消息是实现对象间的通信和请求任务的操作。 对象不是孤立的,他们的互相作用是通过传送消息进行的。 向对象发送一个消息,就是引用一个方法的过程,或一个函 数调用。 消息由三部分构成: 接受消息的对象名、操作名和必要的参数。

消息的示例
顾客.付款(100)
收银员对象 顾客对象

姓名:布兰尼 职衔:收银员 年龄:35 体重:60千克 操作: 收款 打印帐单

顾客 姓名:朱丽叶 年龄:28 体重:52千克
操作: 购买商品

付款


? 类是用于组合各个对象所共有的操作和属性的一种机制

类的示例
汽车类 形状类 动物类

把众多的事物归纳、划分成一些类是人类在认识客观世 界时经常采用的思维方法。分类的原则是抽象。

“类是具有相同属性和行为的一组对象的集合”


在面向对象的编程语言中, 类是一个独立的程序单位, 它应该有一个类名并包括属 性说明和方法说明两个主要 部分。

属性

方法

? 类是具有共同属性和行为的对象的抽象。

类(class)

方法 1 抽 象

? 类可以定义为数据和方法的集合。

类和对象的关系


抽 象 实 例 化

属性或变量 方法

对象

数据或状态

操作或行为

类和对象的关系
楼房1 建筑图纸 楼房2

楼房3
抽象 具体实例化一个实物

类和对象的区别
类 分析时进行 抽象 对象 集合 设计时进行 实例化 对象 实例

类是对 对象的抽象及描述,是对具有共同属性和操作的对象 的统一描述。 通常类名不足以表达他在系统中的含义时,使用属性进行补充。

属性
? 事物的特性在类中表示为变量

? 每个对象的每个属性都拥有其特有的值
? 属性名称由类的所有实例共享
姓名

促销员对象

住址

属性

年龄

“在类中表示对象或实体拥有的特性称为属性 ”

方法

“对象执行的操作称为方法。”

对象的方法或函数成员,是对数据成员或属性的操作, 可用于改变对象的状态,与其他对象进行通信。 对象的行为是定义在对象属性上的一组操作方法的集合。

封装
? 信息隐藏,隐藏对象的实现细节,不让用户看到

? 将东西包装在一起,然后以新的完整形式呈现出来
? 例如,两种或多种化学药品组成一个胶囊 ? 将方法和属性一起包装到一个单元中,单元以类的形式实现

“隐藏属性、方法或实现细节的过程称为封装。”
封装实现信息的隐藏,包括数据和代码。 软件的组成部分应该互相独立,隐藏设计的细节。 封装是信息系统方法的普遍特点,有利于不同的人使用或接触软件的不 同部分(而不是全部),防止系统的一部分非法使用另外的一部分。 对象把数据和方法封装在一个对象中。 例如,电视机。

封装是必须的, 一个人或一件事物, 没有必要,也不可能, 完全向外界展示自己

封装的示例
法拉力公司 . 迪斯尼汽车公司 .

要求

市场经理 雪莉女士

采购经理 罗杰斯先生

接口

封装的示例
法拉力公司 迪斯尼汽车公司

公共
电话号码 电子邮箱 产品种类

公共
电话号码 电子邮箱 汽车种类

私有
备件的制造方法 备件库存 备件的制造成本

私有
汽车的组装方法 汽车库存 汽车的组装成本

有选择地提供数据

封装的示例
实体法拉力公司
属性
电话号码 电子邮箱 产品种类 Auti Ltd. 现有存货数量 雇员详情 所需物料详情

实体迪斯尼汽车公司
属性
电话号码 电子邮箱 汽车种类 Buto Ltd . 汽车规格 雇员详情 库存详情 经销商详情

方法
接收订单 备件的制造方法 计算备件的制造成本 计算利润率

方法
发出订单 汽车的组装方法 计算汽车的组装成本 计算工资 发出订单 编制必要报告

封装性就是把对象的属性和服务结合成一个独立的相同单位, 并尽可能隐蔽对象的内部细节,包含两个含义: ◇ 把对象的全部属性和全部服务结合在一起,形成一个 不可分割的独立单位(即对象)。 ◇ 信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成 一个边界〔或者说形成一道屏障〕,只保留有限的对外接口使 之与外部发生联系。 封装的原则在软件上的反映是:要求使对象以外的部分不 能随意存取对象的内部数据(属性),从而有效的避免了外部 错误对它的"交叉感染",使软件错误能够局部化,大大减少 查错和排错的难度。

数据抽象
? 抽取出关键数据 ? 抽取出属性和方法

“根据具体的应用抽取出类的相关属性和操作。”

数据抽象的示例
Student 类
属性
name studentNO seatNumber

方法
getName()

getStudentNO() getSeatNumber()

4.3在Java中实现类
语法 class <className> { <body of class> } 其中, class 是创建类所使用的关键字, <className> 是类的名称, <body of class> 包含属性和方法的声明。 [public][abstract|final] 修饰符public,abstract,final 说明了类的属性

class Book { String bookName; String authorName; int pages; boolean available; }

class Person { int age; String name; String idNumber; char sex; public void shout(){ } }

对象的创建
? 对象的创建 ?new关键字用于创建对象,如: Person p1 = new Person();

对象的创建
? 对象的成员变量在创建时自动进行初始化 ? 按下表进行
基本类型 boolean char byte short int long float double 默认值 flase ‘\u0000’(null) (byte)0 (short)0 0 0L 0.0f 0.0d

同类多个对象的内存分配
? 成员变量:各对象独有 ? 成员方法:各对象共享 ?Person p1 = new Person();
栈内存
. .

?Person p2 = new Person(); 堆内存
P1的成员变量

20
.

age
Shout()方法
.

p1 p2

0x300 0x302
. .

. P2的成员变量

19
. .

age

.

对象的清除
当不存在对一个对象的引用时, 该对象成为一个无用对象。 Java的垃圾收集器自动扫描对象的动态内存区, 把没有引用的对象作为垃圾收集起来并释放。 System.gc( ); 当系统内存用尽或调用System.gc( )要求垃圾回收时,垃 圾回收线程与系统同步运行

类中的方法
语法
<returnType> <methodName> (<type1> <arg1>, <type2> <arg2>,…)

{ <set of statements> } 其中, <returnType> 是方法返回值的数据类型 <methodName> 是用户自定义的方法名称 方法的参数列表是一组变量声明。
[public | protected | private ] [static] [final | abstract]
static: 类方法,可通过类名直接调用; final: 方法不能被重写 abstract: 抽象方法,没有方法体

类中的方法
方法的命名规则:
不能为 Java 中的关键字
不能包含空格或点号“.” 可以下划线“_”、字母或“$”符 号开头

类中的方法
class Book { String bookName; String authorName; int nopages; boolean available; void isAvailable() { if(available == true) { System.out.println("有这本书"); } } ….. }

方法

使用类中的方法
? 实例方法可使用圆点符号来访问
?方法被调用的对象在圆点左边,而方法的名称在圆点 右边

?例如: Obj.isAvailable();

使用类中的方法
class Book { String bookName; String authorName; int nopages; boolean available; static void isAvailable() { if(available == true) System.out.println(“有这本书"); } Book objBook = new Book(); objBook.isAvailable(); ….. 圆点符号

4.4 this 关键字
? 用于任何实例方法内,指向当前对象 ? this 的值指向对其调用当前方法的对象 ? this 关键字可在需要当前类类型的对象引用时使用

this 关键字的示例
class Pixel { int x; int y; void init (int x, int y) { this.x = x; this.y = y; }
这我们用到了this,这是因 为init()方法的参数名与类 的成员变量x,y的名字相同, 而参数名会隐藏成员变量, 所以在方法中,为了区别参 数和类的成员变量,我们必 须使用this

对象的引用

}

public static void main (String args[]) { Pixel p = new Pixel(); p.init (4,3); //init(int x,int y)中 } //this指向p

p
x=4 y=3

此程序初始化 x = 4 和 y = 3

this

局部变量z和类成员变量z的作用域是不同的
class Variable{ int x=0,y=0,z=0; //类成员变量z

void init(int x,int y) { this.x=x; this.y=y; //局部变量z int z=5; System.out.println(“** in init**”); System.out.println("x="+x+" y="+y+" z="+z); }
} public class VariableTest{ public static void main(String args[]){ Variable v=new Variable(); System.out.println("**before init**"); System.out.println("x="+v.x+" y="+ v.y+" z="+v.z); v.init(20,30); System.out.println("**after init**"); System.out.println("x="+v.x+ " y="+ v.y+" z="+v.z); } }

4.5 构造方法
参数化构造方法 隐式构造方法

参数化构造方法的示例
class Sdate { int month; int day; int year; Sdate(int m,int d,int y) { month=m; 参数化构造方法 day=d; year=y; System.out.println(“日期是 " + m + "/" + d + "/" + y + "."); } public static void main(String args[]) { Sdate S1,S2; S1=new Sdate(11,27,1969); S2=new Sdate(3,3,1973); } }

隐式构造方法的示例
class Sdate { int month=11; int day=27; int year=1969;
隐式构造方法

public static void main(String args[ ]){ Sdate S1; S1=new Sdate(); } }

示例的构造方法
public static void main(String[] args) { Book objBook = new Book("CoreJava", "Albert", 45, true); User objUser = new User(); objUser.getBookStatus(objBook); } void getBookStatus(Book objBook) Book(String book, String author, int pages, boolean status) { objBook.isAvailable(); { bookName = book; }
authorName = author; nopages = pages; available = status; }

传值与传引用
基本数据类型传值 应用数据类型传引用

class People { int money; public void setMoney(int x) { money=x; } int getMoney() { return money; } } 传引用 class A { void f(double y,People p) { y++; 传值 p.setMoney(100); } }

public class E { public static void main(String[] args) { double y=8.0; People zhang=new People(); zhang.setMoney(8888);
System.out.println("zhang's money is "+zhang.getMoney());

System.out.println(" y is "+y); A a=new A(); a.f(y,zhang);
System.out.println("After a.f is called:"); System.out.println("zhang's money is "+zhang.getMoney());

System.out.println(" y is "+y); } }

zhang's money is 8888 y is 8.0 After a.f is called: zhang's money is 100 y is 8.0

class A { int x; public void setX(int x) { this.x=x; } int getX() { return x; } } class B { public void f(A a) {a.setX(100);} } public class E { public static void main(String[] args) { A a=new A(); a.setX(8); System.out.println(a.getX()); B b=new B(); b.f(a); System.out.println(a.getX()); }
}

4.6 包
包JAVA语言中有效地管理类的一个机制 ? 包(package):一种将相关类及接口组织起来的集 合体,即命名空间。 ? JAVA利用文件夹存放包,一个包就是一个文件夹 ? 目的: ? 1)避免重名冲突。 ? 2)方便结构目录的管理

创建包
声明包 package mypackage; public class Calculate { public double volume(double height, double width, double depth) { package mypackage; …… 在当前的工作目录下创建一个名为 } mypackage的子目录, 并将类文件 …… Calculate.java保存在该目录下 }

导入包
import mypackage.Calculate; public class PackageDemo { public static void main(String args[]) { Calculate calc=new Calculate( ); …… } }
导入包

import mypackage.Calculate; PackageDemo在编译时把 mypackage.Calculate包内的类引入

import mypackage.Calculate; public class PackageDemo { public static void main(String args[]) { Calculate calc=new Calculate( ); …… } }

位置: 在import和 类定义之间

1.可以使用多条import语句; Java提供了130多个包,例如: java.applet 包含所有实现java applet 的类 java.awt包含抽象窗口工具集中的图形、文本、窗口GUI类 java.awt.image包含抽象窗口工具集中的图象处理类 java.lang包含所有的基本语言类 java.io包含所有的输入输出类 java.net包含所有实现网络功能的类 java.util包含有用的数据类型类 2.如果要引入一个包内的多个类使用星号* 例如:import java.awt.*; 3. 包java.lang被系统自动引入 4.引入整个包可能会增加编译时间,但不会影响运行速度

将类打包
package tom.jiafei; public class Trangle { double sideA, sideB, sideC,area; boolean boo; public Trangle (double a, double b, double c) { sideA=a; sideB=b; sideC=c; if(a+b>c&&a+c>b&&b+c>a) boo=true; else boo=false; }

public void calculateArea () { if(boo) { double p =(sideA+sideB+sideC)/2.0; area=Math.sqrt((p-sideA)*(p-sideB)*(p-sideC)); } else area=0; }

public void changeTrangle (double a, double b, double c) { sideA=a; sideB=b; sideC=c; if(a+b>c&&a+c>b&&b+c>a) boo=true; else boo=false; }

public double getArea () { return area; } public boolean isTrangle () { return boo; }

}

import tom.jiafei; public class Test { public static void main(String args[]) { Trangle trangle=new Trangle (12,3,1 ); if(trangle.isTrangle()) { trangle. calculateArea (); System.out.println(“The trangle’s area is ”+trangle.getArea()); } else { trangle.changeTrangle(3,4,5); trangle. calculateArea (); System.out.println(“The trangle’s area is ”+trangle.getArea()); } } }

public class Trangle {
double sideA, sideB, sideC,area; boolean foo; public Trangle (double a, double b, double c) { sideA=a; sideB=b; sideC=c; }

public void calculateArea () { double p =(sideA+sideB+sideC)/2.0; area=Math.sqrt((p-sideA)*(p-sideB)*(p-sideC)); }

public void changeTrangle (double a, double b, double c) { sideA=a; sideB=b; sideC=c; }

public double getArea() return area; }

{

public boolean isTrangle() { foo= sideA+sideB>sideC&& sideA+sideC>sideB&& sideB+sideC>sideC; return foo; }

import tom.jiafei; import java.util.Scanner; public class Test { public static void main(String args[]) { Scanner stdin = new Scanner(System.in); Trangle trangle=new Trangle (0,0,0 );

do { System.out.print(“Please input a trangle’s edges: "); double a = stdin.nextInt( ); double b = stdin.nextInt( ); double c = stdin.nextInt( ); stdin.nextLine( ); trangle.changeTrangle(a,b,c); if(trangle.isTrangle()) { trangle. calculateArea (); System.out.println(“The trangle’s area is ”+trangle.getArea()); } else
System.out.println(" "+a+","+b+","+c+" can not make up of a trangle");

} while (query(stdin, "Another time?")); } }

总结
? 对象由状态和行为组成

? 类是对具有相同属性和行为的一组对象的抽象
? 封装是隐藏对象实现细节的过程,以便不让用户看到

? 类的变量和方法可被该类的实例访问 ? 圆点符号用于访问对象的成员 ? 构造函数在创建对象时初始化对象

习题
习题1 1.设计一个复数类, 2.编写一个算法,把两个复数相加。 3.编写一个包含主函数的类,对上述类和算法进行测试 习题2 1.设计一个平面坐标点的类, 2.编写一个算法,计算平面内两个点的距离。 3.编写一个包含主函数的类,对上述类和算法进行测试 习题3(如果做此题有困难,请说明原因) 1.设计一个Student的类,成员变量主要包括年龄和姓名 2.编写一个算法,统计学生人数。 3.编写一个包含主函数的类,创建一些学生对象, 对上述类和算法进行测试

基本概念 对象 类 属性 行为 消息 封装 类定义 构造函数 对象生成 包 this 是客观世界中具有可区分 类是具有相同属性和行为 性的、可以唯一标识的逻 的一组对象的集合 .类是 是描述对象特征的数据 辑单元 , 是数据和操作的 对 对象的抽象及描述 是对象所能执行的活动 封装体 消息指一个对象为执行某 项特定操作而向另一个对 将东西包装在一起,然后 使用 class关键字定义类 象发送的请求 .消息由三 以新的完整形式呈现出来 与类名相同的关键字 部分构成:接受消息的对 例如,两种或多种化 使用 new 关键字创建对象 学药品组成一个胶囊. 象名、操作名和必要的参 管理文件的一种方式 .一个 数 将方法和属性一起包 对当前对象的引用 包对应一个目录 装到一个单元中,单 元以类的形式实现

把众多的事物归纳、划分成一些类是人类在认识客观世 界时经常采用的思维方法。分类的原则是抽象。


分析时 进行抽象

设计时 进行实例化

对象 集合

对象 实例

类使用关键字class 创建,对象使用关键字new创建

数据抽象的示例
Student 类
属性
name studentNO seatNumber

属性很多,只关心与问题相关的
方法对属性进行操作, 为解决问题提供方便 实例方法可使用圆点符号来访问

方法
getName()

Student s=new Student();
s. getName()

getStudentNO() getSeatNumber()

封装性就是把对象的属性和服务结合成一个独立的相位,并尽 可能隐蔽对象的内部细节,包含两个含义: ◇ 把对象的全部属性和全部服务结合在一起,形成一个 不可分割的独立单位(即对象)。 ◇ 信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成 一个边界,只保留有限的对外接口使之与外部发生联系。 封装的原则在软件上的反映是:要求使对象以外的部分不 能随意存取对象的内部数据(属性),从而有效的避免了外部 错误对它的“交叉感染”,使软件错误能够局部化,大大减少 查错和排错的难度。 一个人把他的钱封装在他的口袋中,不为外人所知。 如果你需要他的钱,有两种方法: 1)你直接从他的口袋里拿 2)借—由他自己拿给你 一般使用哪一种方法?

法拉力公司

封装是必须的, 一个人或一件事物, 没有必要,也不可能, 完全向外界展示自己

封装的示例
迪斯尼汽车公司

公共
电话号码 电子邮箱 产品种类

公共
电话号码 电子邮箱 汽车种类

私有
备件的制造方法 备件库存 备件的制造成本

私有
汽车的组装方法 汽车库存 汽车的组装成本

有选择地提供数据,通过公开内容进行信息交流

this 关键字的示例
class Pixel { int x; int y; void init (int x, int y) { this.x = x; this.y = y; }
这我们用到了this,这是因 为init()方法的参数名与类 的成员变量x,y的名字相同, 而参数名会隐藏成员变量, 所以在方法中,为了区别参 数和类的成员变量,我们必 须使用this

对象的引用

}

public static void main (String args[]) { Pixel p = new Pixel(); p.init (4,3); //init(int x,int y)中 } //this指向p

p
x=4 y=3

此程序初始化 x = 4 和 y = 3

this

class Complex { float realpart; float imagpart;

Complex(float v1, float v2 ) {realpart=v1; imagpart=v2; }
public float getReal( {return realpart;} public float getImag ( {return imagpart;} )

)

public String toString() {return realpart+”+” +imagpart+”i”;}

}

//该函数放在带有主函数的类中
public static Complex addTwoComplex (Complex c1, Complex c2 )

{

float real= c1.getReal( )+ c2.getReal( float imag= c1.getImag( )+ c2.getImag( return new Complex(real,image);
}

); );

import java.util.Scanner; public class TestPointAnd Trangle { public static void main(String args[]) { Scanner stdin = new Scanner(System.in); do{ System.out.println("Input two Complex ");

Complex Complex Complex

c1=get Complex(stdin,"first Complex :"); c2=get Complex(stdin,"second Complex :");

c3=add(c1,c2);

System.out.println( c1. toString() +”+”+ c2. toString() + “=”+ c3. toString() ); } while (query(stdin, "Another time?"));

public static Complex getComplex(Scanner stdin,String s) { System.out.println(“Input the “+s); int x=stdin.nextInt(); int y=stdin.nextInt(); return new Complex(x,y); }

习题2(课堂练习) 1.设计一个平面坐标点的类, 2.编写一个函数,计算平面内两个点的距离。 3.编写一个包含主函数的类,对上述类和函数进行测试

习题2 1.设计平面内点的类,提供一个点到另外一个点的距离。 2.设计三角形的类,提供通过三条边计算面积的方法。 3.编写一个包含主函数的类,对上述类和算法进行测试 要求:从键盘深入三个点的坐标,计算以这三个点为顶点 的三角形面积

public class Point { private int x; private int y;

public Point() { x=0; y=0; } public Point(int x,int y) {this.x=x; this.y=y; } public int getX() {return x;} public int getY() {return y;} public double distanceFrom(Point p) { int x1=p.getX(); int y1=p.getY(); return Math.sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y)); }
}

? 类是具有共同属性和行为的 对象的抽象 ? 类可以定义为数据和方法的 集合。

public class Point { private int x; private int y;



public Point() 数据 { x=0; y=0; } public Point(int x,int y) {this.x=x; this.y=y; } public int getX() 方法 {return x;} public int getY() {return y;} public double distanceFrom(Point p) { int x1=p.getX(); int y1=p.getY(); return Math.sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y)); }
}

public class Point { private int x; private int y;



public Point() 数据 { x=0; y=0; } public Point(int x,int y) {this.x=x; this.y=y; } public int getX() 方法 {return x;} public int getY() {return y;} public double distanceFrom(Point p) { int x1=p.getX(); int y1=p.getY(); return Math.sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y)); }
}

public class Point { private int x; private int y;

public Point() { x=0; y=0; } public Point(int x,int y) {this.x=x; this.y=y; } public int getX() {return x;} public int getY() {return y;} public double distanceFrom(Point p) { int x1=p.getX(); int y1=p.getY(); return Math.sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y)); }
}

封装性就是把对象的属性和服务结合成 一个独立的相同单位,并尽可能隐蔽对 象的内部细节,只保留有限的对外接口。 封装使对象以外的部分不能随意存取对 象的内部数据,使软件错误能够局部化, 大大减少查错和排错的难度。

public class Point { private int x; private int y;

this 的值指向对其调用当前方法的对象 this 关键字可在需要当前类类型的对象 引用时使用

public Point() { x=0; y=0; } public Point(int x,int y) {this.x=x; this.y=y; } public int getX() {return x;} public int getY() {return y;} public double distanceFrom(Point p) { int x1=p.getX(); int y1=p.getY(); return Math.sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y)); }
}

public class Point { private int x; private int y;

局部变量和类成员变量的作用域是不同的

public Point() { x=0; y=0; } public Point(int x,int y) {this.x=x; this.y=y; } public int getX() {return x;} public int getY() {return y;} public double distanceFrom(Point p) { int x1=p.getX(); int y1=p.getY(); return Math.sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y)); }
}

public class Point { private int x; private int y; public Point() 隐式构造方法 { x=0; y=0; } public Point(int x,int y) 参数化构造方法 {this.x=x; this.y=y; } public int getX() {return x;} public int getY() {return y;} public double distanceFrom(Point p) { int x1=p.getX(); int y1=p.getY(); return Math.sqrt((x1-x)*(x1-x)+(y1-y)*(y1-y)); }
}

package exercise1;

包JAVA语言中有效地管理类的一个机制

public class Trangle {
double sideA, sideB, sideC; public Trangle (double a, double b, double c) { sideA=a; sideB=b; sideC=c; }

public double calculateArea () { double p =(sideA+sideB+sideC)/2.0; return Math.sqrt((p-sideA)*(p-sideB)*(p-sideC)); } }

package exercise1; 导入包 import java.util.Scanner; public class TestPointAnd Trangle { public static void main(String args[]) { Scanner stdin = new Scanner(System.in); do{ System.out.println("Input three point"); Point p1=getPoint(stdin,"first point:"); 成员变量:各对象独有 Point p2=getPoint(stdin,"second point:"); 成员方法:各对象共享 Point p3=getPoint(stdin,"third point:"); double s1=p1.distanceFrom ( p2); 基本数据类型传值 double s2=p2.distanceFrom ( p3); 引用数据类型传引用 double s3=p3.distanceFrom ( p1); Trangle trangle=new Trangle (s1,s2,s3 ); new关键字用于创建对象 System.out.println(“the area is ”+ trangle. calculateArea ()); } while (query(stdin, "Another time?")); 消息由三部分构成:受消息的对象名、操作名和必要的参数

public static Point getPoint(Scanner stdin,Strings) { System.out.println(“Input the “+s); int x=stdin.nextInt(); int y=stdin.nextInt(); return new Point(x,y);

}

姓名 性别 年龄 工资 简历 镇南关 男 25 8888.88 1992出生,大学本科

//希望从字符串中提取需要的内容 String str="镇南关 男 25 8888.88 1992出生,大学本科"; Scanner input=new Scanner(str); String name=input.next(); String sex=input.next(); int age= input.nextInt(); Double salary= input.nextDouble(); String resume=input.nextLine();
System.out.println(name+" "+sex+" "+age+" "+salary+" "+ resume);

镇南关 男 25 8888.88

1992出生,大学本科

姓名 性别 年龄 工资 简历 镇南关 男 25 8888.88 1992出生,大学本科
Scanner input=new Scanner(System.in); String name=input.next(); String sex=input.next(); int age= input.nextInt(); Double salary= input.nextDouble(); String resume=input.nextLine();
System.out.println(name+" "+sex+" "+age+" "+salary+" "+ resume);

从键盘输入: 镇南关 男 25 8888.88 屏幕显示: 镇南关 男 25 8888.88

1992出生,大学本科

1992出生,大学本科


相关文章:
第4章 类、对象和接口_图文.ppt
第4章 类对象和接口 - 关于java课程的教学ppt... 第4章 类对象和接口 宝鸡文理学院计算机科学系 【学习目标】本讲主要讲述了java语言的面向对象技术, 包括面...
第四章 类、对象和接口_图文.ppt
第四章 类对象和接口 - 第四章 类对象和接口 1 对象和类 对象(obje
第4章 类、对象和接口3_图文.ppt
第4章 类对象和接口3 - 第4章类对象和接口 4.10 什么是异常 4.1
第四章-类对象和接口_图文.ppt
第四章-类对象和接口 - JAVA程序设计 适用专业: 软件工程(本科) 理论学时: 72 实践学时: 36 运算符、表达式、 第四章 运算符、表达式、语句 作业分析 学生...
04第四章 类、对象和接口_图文.ppt
04第四章 类对象和接口 - 第四章 类对象和接口 4.1 编程语言的几个发
第4章 类、对象和接口-11_图文.ppt
第4章 类对象和接口-11 - 第4章类对象和接口 章 4.1面向对象编程
第4章 类、对象和接口 - 南昌大学_图文.ppt
第4章 类对象和接口 - 南昌大学 - Java 2 实用教程(第三版) 主讲
第4章 类、对象和接口_5_图文.ppt
第4章 类对象和接口 主要内容 4.1 面向对象 4.2 类 4.3 对象 4
第四章 java 中的对象、类、包和接口_图文.ppt
第四章 java 中的对象、类、包和接口 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 初识对象和类 对象的生命周期 创建类 包的创建和使用 类成员的访问控制 类成员...
Java 2实用教程课件(第3版第4章 类、对象和接口)_图文.ppt
Java 2实用教程课件(第3版第4章 类对象和接口)_IT/计算机_专业资料。JAVA 第4章 ? ? ? ? ? ? ? ? ? ? 类、对象和接口 ? ? ? ? ? ? ? ? ...
第4章 Java类和对象_图文.ppt
第4章 Java类和对象 - 第4章 类和对象 ? ? ? ? ? 学习导读 本章着重介绍Java编程中类和对象等非常重要的 概念。 Java 程序是由一个个类...
第4章 类的继承和接口_图文.pdf
第4章 类的继承和接口_物理_自然科学_专业资料。Java程序设计第4章 类的继承...Object 类 ?修饰符protected,final和abstract ?多态性和对象转换 ?接口 ?内部类...
第4章类与对象_图文.ppt
第4章类与对象 - ? ? ? ? ? ? ? ? ? ? ? ? ? ? 主要内容 ● 从抽象到类 ● 构造方法与对象的创建 ● 参数传值 ● 有理数的类封装 ● 对象的...
第4章 类、对象和接口_图文.ppt
第4章 类对象和接口 - 文档均来自网络,如有侵权请联系我删除文档... 第4章 类对象和接口_工学_高等教育_教育专区。文档均来自网络,如有侵权请联系我删除文...
第4章 类、对象和接口_图文.ppt
第4章 类对象和接口 - Java程序设计 Java程序设计 第4章 类对象和接口 章 教学内容 类与对象的基本概念 类的继承 接口的使用方法 教学重点 面向对象编程...
第4章 类和对象_图文.ppt
第4章 类和对象 - 第4章 类和对象 ? ? ? ? ? 学习导读 本章着重介绍Java编程中类和对象等非常重要的 概念。 Java 程序是由一个个类定义组成...
第4章 类、对象和接口_图文.ppt
第4章 类对象和接口_其它考试_资格考试/认证_教育专区。第四章 和接口 类、对象 教学目标 ? 了解类和对象的基本概念 ? 掌握类的定义方法 ? 掌握对象的初始...
第4章类和对象-PPT课件_图文.ppt
第4章类和对象-PPT课件 - 第4章 类和对象 ? ? ? ? ? 学习导读 本章着重介绍Java编程中类和对象等非常重要的 概念。 Java 程序是由一个个类...
第4章类和对象_图文.ppt
第4章类和对象 - 1/63 第4章 类和对象 ? ? ? ? ? 学习导读 本章着重介绍Java编程中类和对象等非常重要的 概念。 Java 程序是由一个个类定义组成的,...
第四章 java 中的对象、类、包和接口_图文.ppt
第四章 中的对象、 java 中的对象、类、包和接口 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 初识对象和类 对象的生命周期 创建类 包的创建和使用 类成员的...
更多相关标签: