第六章--构造方法
类图及画法
使用类图描述类
用于分析和设计“类” 直观、容易理解 属性名
“+”:publi c “-”:private 方法名
类名
Dog
类型
+ name:String + health:int + love:int + strain:String + print( ) : void
参数: 名字:类型,名字:类型
封装二
• 含义2:信息隐蔽,即尽可能隐蔽对象的内部细节, 对外形成一个边界〔或者说形成一道屏障〕,只保 留有限的对外接口使之与外部发生联系。 把成员变量声明为private,提供public的方法对其 进行访问或修改,隐藏类的实现细节。
class Person{
private String name; private int age; public void setName(String name){ =name; } public String getName(){return name;} …… }
• 每款汽车有款式和编号,款式、编号不能修改 Seller • 汽车销售人员有姓名,姓名不能修改 - name:String
销售员
– 销售人员有两种销售方式:
+ getName():String + setName(name:String):void • 按车辆销售,每次一辆 + sell(car:Excelle):void • 按车型销售(凯越),要同时告诉销售人员购买数量 + sell(car:Regal):void + sell(car:Excelle,num:int):void Excelle - type:String - id:String + Excelle(id:String,type:String) + getType():String + getId():String 凯越 Regal - type:String - id:String + Regal(id:String,type:String) + getType():String + getId():String 君威
构造方法
构造方法定义:
一个在创建对象时被自动调用的特殊方法。
构造方法作用:
为对象进行初始化(成员变量)工作。
方法重载
方法重载,指同一个类中多个方法:
方法名相同 参数列表不同
与返回值、访问修饰符无关 System.out.println(45); 示例1 System.out.println(true); System.out.println("狗在玩耍!");
import 包名. 类名;
1、系统包:java.util 2、自定义包:cn.jbit.classandobject
*: 指包中的所有类 AccpSchool :指包中的AccpSchool类
小结
• School.java位于com.my.classandobject包中, HelloTest.java位于demo包中,下面程序空缺部分 需要填入代码吗?如果需要,是什么?
public Penguin() { //代码 } public Penguin(String name, int health, int love, String sex) { //代码 示例2 }
this关键字
1、对字段使用this
最经常使用this关键字的情况,是在对象的一个字段被方法或构造器的参数 屏蔽时,需要调用这个被屏蔽的字段的这有返回值 类型
与类名相同
public 构造方法名( ) { //初始化代码 }
可以指定 参数
public Penguin() { name = "qq"; love = 20; sex = "Q仔"; System.out.println("执行构造方法"); }
//package 添加代码1 com.my.classandobject; public class School { public void showMessage(){ System.out.println(“这是丰 泽培训中心。"); } } 声明包的含义: 声明当前类所处的位置 //package 添加代码2 demo; com.my.classandobject.*; //import 添加代码 3 public class HelloTest { public static void main(String[ ] args){ School center = new School(); center.showMessage(); } 导入包的含义: } 声明在当前类中要使用到的 别的类所处的位置
用面向对象描述世界
从现实中抽象出类分三步: 1. 找出它的种类 2. 找出它的属性 3. 找出它的行为
用面向对象描述世界
第一步:发现类
各个狗对象 } 名词
class Dog {
根据“对象”抽象出“类”
用面向对象描述世界
第二步:发现类的属性
名词
狗类共有的特征:
1. 品种 2. 年龄 3. 昵称 4. 健康情况 5. 跟主人的亲密度 ……
动词
1. 跑 2. 吠 3. 输出狗的信息 …… 只放我关心 的方法
class Dog { String name = "旺财"; // 昵称 int health = 100; // 健康值 int love = 0; // 亲密度 String strain = "拉布拉多犬"; // 品种 /* 输出狗的信息 */ public void print() { // 输出狗信息的代码 } }
封装的好处
• 封装的好处
隐藏类的 实现细节
只能通过规 定方法访问 数据
方便修改实现
方便加入控 制语句
封装的实现 封装的步骤
Dog - name:String - health:int - love:int - strain:String
修改属性的可见性 class Dog { 1 private String name = "旺财"; // 昵称 设为 private int health = 100; // 健康值 private private int love = 0; // 亲密度 + print():void private String strain = "拉布拉多犬"; // 品种 + setHealth():void 用于属性 public int getHealth() { + getHealth():String 创建getter/setter方法 return health; 的读写 2 …… } 对属性值的 public void setHealth (int health) { 3 合法性进行 if (health > 100 || health < 0) { 判断 this.health = 40; this代表 System.out.println(" 在getter/setter 方法中 健康值应该在 0和100之间,默认值是40"); 当前对象 } else 加入属性控制语句 this.health = health; } // 其它getter/setter方法 }
this关键字
2、对构造器使用this
在一个构造器中,还可以使用this关键字来调用同一个类中的另外的构造器。 这种做法称之为“显式构造器调用”。如:
封装一
• 含义1:把属性和行为封装在类中,把对象的全部 属性和全部行为结合在一起,形成一个不可分割的 独立单位(即对象)。
class Person{ String name; int age; public void eat(){ System.out.println(―eat with mouth.‖); } public void shout (){ System.out.println(―my age is ‖+age); } }
package net.javagroup.research.powerproject; 部门名 项目名
如何导入包
• 为了使用不在同一包中的类,需要在Java程序中 使用import关键字导入这个类 关键字import并不陌生
import java.util.*; //导入java.util包中所有类 //导入指定包中指定类 import com.my.classandobject. School;
包命名规范
• 包名由小写字母组成,不能以圆点开头或结尾
package mypackage; package .mypackage; ×
• 包名之前最好加上唯一的前缀,通常使用组织倒置 的网络域名。如:域名 • package net.javagroup.mypackage; • 包名后续部分依不同机构内部的规范不同而不同
第六章 构造方法及封装
本讲内容
• • • • 包的概念和使用 this关键字 构造方法及方法重载 封装的实现及访问控制权限
本章目标
• • • • 掌握构造方法 掌握方法重载 掌握this关键字的用法。 掌握封装的实现及成员的访问控制
为什么需要包
• 生活案例 •
文档分门别类,易于查找
易于管理
不同内容的文档可以放在不同的 袋子中,拥有相同的名字,避免冲突
包
• 包——解决类的同名问题
包 A.java
允许类组成较小的单元(类似 文件夹),易于找到和使用相 应的文件 防止命名冲突
更好的保护类、属 性和方法
如何创建包