封装(encapsulation)
类使得数据和对数据的操作集成在一起,从而对使用该类的其他人来说,可以不管它的实现方法,而只管用它的功能,从而实现所谓的信息隐藏。
封装 ,
使用类图描述类
用于分析和设计 《类》 直观、容易理解
对象初始化
使用构造方法: Penguin pgn1 =new Penguin();
构造方法
无返回值类型 ,与类名相同
访问修饰符 构造方法名 //可以指定参数 (){
//初始化代码
}
示例 : public Penguin(){
// 系统提供默认无参构造方法
}
自定义构造方法:
系统不再提供默认无参构造方法
public Penguin(){
name =“qq”; //方法名相同 }
love=20; //参数项不相同 } 方法重载
sex=“Q仔”; //与返回值、访问修饰符无关 }
}
this.name =name;
this.health=health;
this.love=love;
this.sex=sex;
备注: this 关键字是对一个对象的默认引用,这里用以区分同名成员变量
调用默认无参构造方法,有返回值类型,不是构造方法!
static 关键字
使用 static 定义变量 用 final 修饰的变量称为常量,其值固定不变
使用static 定义方法
static void print(){}用类名调用:Penguin.print();
静态常量 注: 在方法里不可以定义static 变量
Dog d =new Dog();
d.health =-1000;
属性随意访问,不合理的赋值
如何解决上面设计的缺陷? 使用封装
什么是封装:
面向对象三大特征之一 --> 封装 封装的概念
封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法
来实现对隐藏信息的操作和访问。
封装的好处:
1 只能通过规定方法访问数据
2 隐藏类的实现细节
3 方便修改实现
4 方便加入控制语句
封装步骤:
1.修改属性的可见性 -->设为 private
2. 创建公有的 getter/setter 方法 -->用于属性的读写
3. 在getter /setter 方法中加入属性控制语句 -->对属性值的合法性进行判断
this 关键字的用法
调用属性
this.health =100;
this.name=“大黄”;
调用方法
this.print();
调用构造方法
this ();
this("小黑", 100,100,"雄"); -->如果使用,必须是构造方法中的第一条语句
重点: //构造方法不能被子类继承
//子类可以调用父类的构造方法,
//如果手动添加了带参数的构造方法,同时添加上无参构造方法
//如果调用子类的构造方法,如果不显示的调用父类的构造方法,
默认调用的是父类的无参构造方法 。
//所有类的父类是 Object
备注://方法的重载定义:方法名相同、参数列表不同,与方法的访问修饰符,返回值类型无关
(构造方法是方法重载的特殊)
2、 //方法重写的定义:方法名相同,参数列表相同,返回值类型相同或是其子类,
访问权限不能严于父类 。