1 Department of Computing.

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

第五章 类的继承和派生 Inheritance/extends/derive. 教学目标 理解继承的概念和作用 派生类的定义 理解访问修饰符 protected 方法的重写 继承下的构造函数的使用 继承下的 finalize 方法的使用 理解超类和子类的关系.
第3-2章 类与 对象 Java类的特性 教学内容: 类的私有成员与公共成员 方法的重载 构造方法 实例成员与静态成员 重点: 重载 难点:
单元二:面向对象程序设计 任务二:借书卡程序设计.
第四章 类、对象和接口.
第三讲 面向对象(上).
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第 9 章 物件的建構.
6. 6 Overloading methods and constructors 6
项目6 通用堆栈.
Java程序设计教程 第一讲 Java概述.
四資二甲 第三週作業 物件導向程式設計.
面向对象的程序设计(一).
面向对象程序设计(Java) 徐志红
南京理工大学 第2章 Java基本语法 本章我们将学习Java编程语言的基本语法,包括变量、操作符、表达式、语句、字符串、数组、控制流以及如何使用帮助文档。 使用下面的编程框架: public class Test{ public static void main(String []args){ //以下添加测试代码.
第一章 面向对象程序设计.
第二章 JAVA语言基础.
類別的繼承-一般關係: 繼承是宣告的類別繼承現存類別的部份或全部的成員資料和方法 , 新增額外的成員資料和方法或覆寫和隱藏繼承類別的方法
Ch07 介面與多重繼承 物件導向程式設計(II).
JAVA程序设计 (03) JAVA Programming
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
Ch08 巢狀類別 物件導向程式設計(II).
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
第二章 C# 基础知识.
Java基础 JavaSE异常.
Classes Lecturer: 曾學文.
CHAPTER 9 建構方法 ROBERT.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
第六章 类的扩展与继承.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
Ch10 類別與物件-方法 Java程式設計(2).
程式設計實作.
抽象类 File类 String类 StringBuffer类
Java程序设计 第9章 继承和多态.
C#面向对象程序设计 $7 继承和多态性.
類別的繼承 Vehicle Car.
SPOTO TM JAVA课程 JAVA中的OO语法
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
第6章 继承和接口设计 6.1 继 承 6.2 多态性 6.3 抽象类 6.4 接口 6.5 接口在集合排序中的应用.
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
第9讲 Java的继承与多态(一) 类的继承 子类的创建 方法覆盖.
2019/1/16 Java语言程序设计-类与对象 教师:段鹏飞.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
第16章 虛擬與多形 16-1 虛擬函數 16-2 純虛擬函數與抽象類別 16-3 多形 16-4 虛擬繼承與虛擬解構子.
辅导课程八.
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第二章 Java基本语法 讲师:复凡.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Interfaces and Packages
Object-Oriented Programming in C++ 第二章 类和对象
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
龍老師我不會Debug QQ.
第二章 Java基本语法 讲师:复凡.
Class 2005/05/25.
辅导课程十二.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
第6章 继承和多态 伍孝金
Summary
Presentation transcript:

1 Department of Computing

上讲回顾 类的编写方法 对象的创建方法 成员变量的初始化 类名 对象名=new 类名() 定义变量时初始化 class 类名{ 属性 行为 } 对象的创建方法 类名 对象名=new 类名() 成员变量的初始化 定义变量时初始化 构造方法初始化,构造方法的方法名与类名相同 2 Department of Computing

实例化一个教师,并对其初始化(构造方法) 输出该教师的自我介绍 上讲课堂练习 编写一个类,代表教师,要求: 具有(私有)属性:姓名、年龄 具有行为:自我介绍 编写一个测试类,要求: 实例化一个教师,并对其初始化(构造方法) 输出该教师的自我介绍 3 Department of Computing

上讲课堂练习(续) class Teacher{ private String name; private int age; Teacher(String n,int a){ name=n; age=a; } String introduction() { return "大家好!我是" + name + ",我今年"+ age+"岁"; public class TeacherTest { public static void main(String[ ] args) { Teacher teacher = new Teacher("李芳",20); System.out.println(teacher.introduction()); 4 Department of Computing

编程题 定义狗类,属性有名字、颜色和体重。 class Dog{ String name; String color; int weight; void info(){ System.out.print("我的名字叫"+name+",毛发是"+color+",我有"+weight+"斤"); } } Dog(String n,String c,int w){ //构造方法 name=n; color=c; weight=w; } public class Dog1 { public static void main(String[] args) { Doggg d1=new Doggg("阿黄","黄色",30); Dog d2=new Dog("石头","白色",10); d1.info(); d1.bark(); d2.info(); d2.bark(); } void bark(){ System.out.println("汪汪汪汪"); } 5 Department of Computing

第4讲 使用类和对象编程(2) 6 Department of Computing

本讲内容和教学目标 本讲内容: 静态变量和实例变量 静态方法和实例方法 this的用法 封装 包的创建和应用 教学目标: 理解静态变量和实例变量区别 理解静态方法和实例方法区别 掌握this的用法 掌握包的创建和应用方法 7 Department of Computing

静态和实例变量的区别 引例 运行结果:对象创建之前staticVar=0 创建第一个对象staticVar=1,instanceVar=1 public class Test { public static int staticVar = 0; public int instanceVar = 0; public Test(){ staticVar++; instanceVar++; } public static void main(String args[]){ System.out.println("对象创建之前 staticVar="+Test.staticVar); Test t=new Test(); System.out.println("创建第一个对象 staticVar="+t.staticVar+",instanceVar="+t.instanceVar); Test t1=new Test(); System.out.println("创建第二个对象 staticVar="+t1.staticVar+",instanceVar="+t1.instanceVar); }} 运行结果:对象创建之前staticVar=0 创建第一个对象staticVar=1,instanceVar=1 创建第二个对象staticVar=2,instanceVar=1 思考:staticVar 与instanceVar 的区别? 8 Department of Computing

实例变量和静态变量的区别 类有用关键字static修饰的成员变量称为静态变量,而没有用关键字static修饰的成员变量称为实例变量。主要区别为: ① 在内存分配的空间上。不同对象的同名实例变量之间的取值互不影响;不同对象的同名静态变量分配相同的内存空间,也就是说多个对象共享静态变量。 ② 在内存分配的时间上。当类的字节码文件被加载到内存时,静态变量就分配了相应的内存空间;实例变量是当类的对象创建时才会被分配内存。 ③ 访问方式不同。实例变量必须用对象名访问;静态变量可以用类名访问,也可以用对象名访问。 9 Department of Computing

成员变量实例 例3.3 编写一个矩形类,用静态变量统计所创建的矩形对象的个数。文件名Jpro3_3.java public class Jpro3_3 { public static void main(String args[]) System.out.println(“当前矩形对象的个数 为:"+Rectangle.number); Rectangle r1=new Rectangle(1.0f,2.0f); System.out.println("当前矩形对象的个数为:"+r1.number); Rectangle r2=new Rectangle(2.0f,2.5f); System.out.println("当前矩形对象的个数为:"+r2.number); System.out.println("当前矩形对象的个数为:"+Rectangle.number); } class Rectangle { private float length; private float width; static int number=0; Rectangle(float l, float w) length=l; width=w; number++; } 10 Department of Computing

(1)变量所包含的对象体积较大,占用内存较多。 (2)变量所包含的对象生命周期较长。 (3)该类的对象实例有对该变量所包含的对象的共享需求。 静态变量适用范围 (1)变量所包含的对象体积较大,占用内存较多。 (2)变量所包含的对象生命周期较长。 (3)该类的对象实例有对该变量所包含的对象的共享需求。 11 Department of Computing

思考:staticOutPut与outPut的区别? 静态和实例方法区别 引例 public class Test2 { static String staticstr = "静态的变量"; String str = "非静态的变量"; public static void staticOutPut(){ System.out.println("静态方法"); } public void outPut(){ System.out.println("非静态的方法"); public static void main(String[] args) { Test2.staticOutPut(); Test2 test = new Test2(); test.outPut(); 思考:staticOutPut与outPut的区别? 12 Department of Computing

实例 例3.5 定义静态方法访问静态变量 问题:静态方法中可以访问实例变量吗? public class Jpro3_5 { public static void main(String args[]) Rectangle.print(); Rectangle r1=new Rectangle(1.0f,2.0f); Rectangle r2=new Rectangle(2.0f,2.5f); r1.print(); } class Rectangle { private float length; private float width; private static int number; Rectangle(float l, float w) length=l; width=w; number++; } public static void print() System.out.println("当前矩形对象的个数为:"+number); 问题:静态方法中可以访问实例变量吗? 13 Department of Computing

静态方法和实例方法的区别 类中用关键字static修饰的成员方法称为静态方法,否则为实例方法。主要区别为: ① 在内存分配的时间上。当类的字节码文件被加载到内存时,静态方法就分配了相应的入口地址;实例方法是当类的对象创建时才会被分配入口地址。 ② 访问方式不同。实例方法必须用对象名访问;静态方法一般用类名访问,也可用对象名访问。 ③ 操作的对象不同。静态方法只能操作静态变量,不能操作实例变量;而实例方法既可操作静态变量也可操作实例变量。 ④ 调用方法不同。实例方法中可以调用实例方法和静态方法,而静态方法中只能调用静态方法,不能调用实例方法。 14 Department of Computing

改错题 public class ComputeAverageValue { double chinese=85.5; public static void main(String args[]) int math=90,english=88; double total=chinese+math+english; double average=(chinese+math+english)/3; System.out.println("average="+ average); } 找出程序中的错误 15 Department of Computing

关键字this 1.使用this区分成员变量和局部变量 class Rectangle { private double length; private double width; Rectangle(double length,double width) { this.length= length; //成员变量被隐藏 this.width=width; } public class Jpro3_5_0 { public static void main(String args[]) Rectangle r1=new Rectangle(1.0f,2.0f); Rectangle r2=new Rectangle(2.0f,2.5f); } 16 Department of Computing

关键字this 2.用this调用本类中的其他构造方法 class Rectangle{ private float length; private float width; public Rectangle() { this(5.5f,3.5f); //调用了带参构造方法 } public Rectangle(float length, float width) this.length=length; this.width=width; public class Jpro3_5_1 { public static void main(String args[]) { Rectangle r1=new Rectangle(); } 17 Department of Computing

包的含义和作用 包(package)是Java提供的类的组织方式。 包的组织方式和表现方式与Windows中的文件和文件夹完全相同。 包=文件夹 类=文件 一个包中可以放置许多类文件和子包。 包的作用 Java语言可以把类文件存放在不同层次的包中,其目的是方便软件的维护、资源的重用和防止类的重名。 Java语言规定:同一个包中的文件名必须唯一,不同包中的文件名可以相同。 18 Department of Computing

包的创建和应用 1.创建包 定义包语句的格式为:package <包名>; 如:package china.anhui.hefei; 2. 使用包 import语句的使用分两种情况: ① 导入某个包中的所有类,如: import mypackage.*; ② 导入某个包中的一个类,如: import mypackage.Student; 注意:当用方式①导入类时,如包中还有子包,则子包中的类不会被导入。 19 Department of Computing

生活中的事例 电视机、遥控机、电路板、生产线上工作人员照片 把复杂的事情包起来,让其完整

启示: 1.信息隐藏 2.以完整形式呈现出来 3.信息保护 隐藏实现细节,用户不可见 类似由两种或多种化学药品组成一个胶囊 将方法和属性一起包装到一个单元中,单元以类的形式实现 3.信息保护 举例,电视 胶囊 类,把属性方法集成在一起

封装 封装的概念 封装的优点 封装的实现 访问权限的设定 封装的应用 小结

什么是封装?

封装 电路板 电视机背面接口 抽象,把共同的特征拿出来,把关心的项拿出来。是从实到虚的过程。面向对象会把对数据和对数据的操作放在一起。 定义 封装:将对象的属性和行为组合成一个独立的单位或部件,并尽可能隐蔽对象内部细节,只保留必要的对外接口,使之与外部发生联系。 抽象,把共同的特征拿出来,把关心的项拿出来。是从实到虚的过程。面向对象会把对数据和对数据的操作放在一起。 学生类:姓名、学号、班级 汽车类:品牌、轮子、速度、油耗 电路板 电视机背面接口

电话号码 电子邮箱 产品种类 备件库存 查询产品价格 配件的制造方法 计算备件的制造成本 机械制造厂 电话号码 电子邮箱 产品种类 备件库存 查询产品价格 配件的制造方法 计算备件的制造成本

电话号码 电子邮箱 产品种类 备件库存 查询产品价格 配件的制造方法 计算备件的制造成本 机械制造厂 电话号码 电子邮箱 产品种类 备件库存 查询产品价格 配件的制造方法 计算备件的制造成本 查询库存 查询库存

软件包 把多个类收集在一起成为一组,称作软件包。 软件包也是一种类库的封装机制。 用包来有序组织类和接口。 软件包对应着文件系统的目录层次结构。 如2万首MP3歌曲,分为爱情歌曲、外国歌曲 包把类封装起来

封装的好处 有哪些呢?

封装的优点 电话号码 电子邮箱 产品种类 备件库存 查询产品价格 配件的制造方法 计算备件的制造成本 隐藏类的细节 能够保护隐私 机械制造厂 方便加入控制语句 类的可重用性高 查询产品价格 配件的制造方法 计算备件的制造成本 以自己为例,手机号码是对外的,家庭财产为隐私 胶囊 教室里放着大家的考试成绩,如为隐私属性,必须是本班同学成绩,不给其他班级查询;或只给姓王的查询,不给姓李的查询 查询库存

如何实现封装?

创建“库存查询方法”用于对备件库存的读取 封装的步骤 将“备件库存”设为私有 修改属性的可见性 创建“库存查询方法”用于对备件库存的读取 创建访问属性的方法 在访问属性的方法中加入控制语句 对“备件库存量”的访问控制进行细化

如何定义类中属性和方法的访问权限呢?

生活中的事例 公共:面向所有人,电话号码、电子邮箱、产品种类 单位内部:面向本单位的所有人,内部电话、轮班表 部门内部:面向部分人,备件库存、备件的制造成本 隐私:面向极少的人,专利配方参数、生产工艺、设计图纸

对应关系 公共 public 单位内部 protected 部门内部 default 隐私 private

public pretected default private public 可以被本类和其他任何类的方法访问 pretected 可以被子类和相同软件包中的类访问 default default 允许同一软件包中的类和本类访问 Public 全部公开 private private 只允许本类中的方法访问

public:公共的 pretected: default: default: 可以理解为一个人的外貌特征,是谁都能看到的。 对于家族内部是非隐私的,对于外界确是隐私的。 default: 在自己家庭中不是秘密,对于其他人来说就算是隐私了(只能在本包中能看到,挎包就没办法看到了。 default: 完全的隐私,除了自己别人都不能知道的。

√ √ √ √ √ √ √ √ √ √ 修饰符 类成员修饰符 同一个类 同一个包 不同包的子类 不同包非子类 private default protected public 同一个类 同一个包 不同包的子类 不同包非子类 √ √ √ √ √ √ √ 请同学回答 √ √ √

如何在实践中应用呢?

问题提出: 机械制造厂 电话号码 电子邮箱 产品种类 备件库存 如何访问? 查询产品价格 配件的制造方法 计算备件的制造成本 查询库存

解决的过程: 如何访问? 电话号码 电子邮箱 产品种类 备件库存 查询产品价格 配件的制造方法 计算备件的制造成本 机械制造厂 通过公有方法来访问类中的私有属性 查询库存

解决的过程: 定义工厂类的属性和方法 设置各个属性和方法的访问权限 定义某个私有属性的访问方法 实例化工厂类的一个对象 根据访问权限访问所需属性

解决的过程: 定义工厂 定义公有属性电话号码 机械制造厂 定义公有属性电子邮箱 电话号码 定义公有属性产品种类 电子邮箱 定义私有属性备件库存 定义公有属性查询产品价格 定义私有属性配件的制造方法 定义私有属性计算备件的制造成本 定义公有属性查询库存 机械制造厂 电话号码 电子邮箱 产品种类 备件库存 查询产品价格 配件的制造方法 计算备件的制造成本 查询库存

定义工厂 public class factory{ public String teleNo; 定义公有属性电话号码 public String email; public String category private int storage; private void prouce() { …… }; private void queryCost(){ pubic void queryStorage() { public void queryPrice(); { 定义工厂 定义公有属性电话号码 定义公有属性电子邮箱 定义公有属性产品种类 定义私有属性备件库存 定义私有属性配件的制造方法 定义私有属性计算备件的制造成本 定义公有属性查询库存 定义公有属性查询产品价格 public String teleNo; public String email; public String category; private int storage; private void prouce(); private void queryCost(); Pubic void queryStorage(); Public void queryPrice();

√ √ 程序验证: ╳ 验证一 验证二 验证三 本类其他方法对私有属性的访问。 其他类对本类私有属性的访问。 其他类通过本类公开方法对本类私有属性的访问。 √

案例 public class Dog { private String name; void setName(String n){ name=n; } String getName(){ return name; void info(){ System.out.println("汪汪"); import s0514.Dog; public class DogTest { public static void main(String[] args) { Dog d1=new Dog(); d1.setName("阿黄"); System.out.println(d1.getName()); } 45 Department of Computing

封装 封装就是把对象的属性、方法结合成为一个独立的系统单位,并尽可能的隐藏对象的内部细节。 由private修饰的成员变量只能被本类访问。用private修饰成员变量可以实现数据隐藏(封装)机制. 售报亭 属 性 方法 报刊A 报刊B … 钱箱 报刊零售 款货清点 顾 客 公有数据 数据 私有数据 方法 方法 对象A 对象B 修改Jpro3_1.java 46 Department of Computing

封装举例 public class Jpro3_1_3 { class Rectangle public static void main(String args[]) Rectangle r1=new Rectangle(); r1.setLength(5.5f); r1.width=3.5f; float len= r1.getLength(); System.out.println("修改后的length为:"+len); } class Rectangle { private float length=1.1f; float width; double perimeter() return 2*(length+width);} double area() return length*width; } void setLength(float l){ length=l; } float getLength(){ return length; 47 Department of Computing

自定义包应用实例 例3.9 修改例3.2,将Point类放到point包中,并用文件名Point.java保存;将Circle类放到circle包中,并用文件名Circle.java保存;将Jpro3_2类用文件名Jpro3_9.java保存。修改后的程序如Jpro3_9.java 48 Department of Computing

本讲小结 实例变量和静态变量 实例方法和静态方法 this的用法 包的创建和应用 49 Department of Computing

课堂练习 设计并实现一个Person类,能够显示人的姓名和年龄,该类中包括有两个私有属性,姓名(name)和年龄(age)。定义构造方法,用来初始化数据成员。再定义Display方法,用于打印姓名和年龄。 创建一个名称为StaticDemo的类,并声明一个静态变量和一个普通变量。对变量分别赋予10和5的初始值。在main()方法中输出变量值。 50 Department of Computing