文章目录
- 一、封装与隐藏
- 二、封装性的体现
- 三、构造器(构造方法)
一、封装与隐藏
1. 对概念的理解
① “高内聚,低耦合”。
- 高内聚 :类的内部数据操作细节自己完成,不允许外部干涉;
- 低耦合 :仅对外暴露少量的方法用于使用。
② 隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来。 这就是封装性的设计思想。
2. 代码示例
分析过程:
目的是显示“动物”的信息。
写法1实现了定义 动物Animal类,其中有属性name、age和legs,在main函数里,声明了对象xb,对其属性分别赋值,但当legs为负数后,发现一样能正常输出,不合实际情况,所以有了第二种写法。
对于第二种写法,main中直接调用setLegs函数,可以正常输出;但考虑到仍可以调legs,避免不了用户仍可以写“xb.legs”的情况。
于是最终考虑禁掉直接调legs的属性,所以引出了权限修饰符–private(私有)。即在int legs前面加上private即可(相当于对属性的封装)。
这也算是对private权限修饰符的理解。
写法1:
public class Zoo {
public static void main(String args[]) {
Animal xb = new Animal();
xb.name ="待付款";
xb.age = 6;
xb.legs = 4;
//xb.legs = -4;
xb.show();
}
}
class Animal {
String name;
int age;
int legs;//腿的个数
public void eat(){
System.out.println("吃");
}
public void show(){
System.out.println("name="+name+" ,age="+age+",legs="+legs);
}
}
写法2:
package com.qihang;
public class Zoo {
public static void main(String args[]) {
Animal xb = new Animal();
xb.name ="待付款";
xb.setLegs(-8);
xb.show();
}
}
class Animal {
String name;
int age;
int legs;
public void setLegs(int A){
legs = A;
if(A >= 0) {
legs = A;
}
else {
legs = 0;
}
}
public void eat(){
System.out.println("吃");
}
public void show(){
System.out.println("name="+name+" ,age="+age+",legs="+legs);
}
}
二、封装性的体现
1. 结合上述代码示例,我们将类的属性xx私有化(private),同时提供公共的(public)方法来获取(getxx)和设置(set)。实现了:
- 隐藏一个类中不需要对外提供的实现细节;
- 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,
限制对属性的不合理操作; - 便于修改,增强代码的可维护性。
2. Java规定的四种权限(由小到大):private、缺省、protected、public(注意)
访问权限:
三、构造器(构造方法)
1.构造器(constructor)的作用
① 创建对象 : new +构造器
如:
Order o = new Order();
②给属性初始化
如:
Person p = new Person(“Peter”,15);
说明:
- 如果没有显示的定义类的构造器,则系统默认提供一个空参的构造器。
- 一个类可以创建多个重载的构造器。
- 一旦显式定义了构造器,则系统不再提供默认构造器。
- 父类的构造器不可被子类继承。
2.定义格式:
权限修饰符 类名 (参数列表) {
初始化语句;
}
public class Constructor {
public static void main(String[] args) {
Person A= new Person();
}
}
class Person{
int legs;
// 构造器
public Person()
{
System.out.println("1234567---");
}
}
运行直接打印输出 :1234567— 。
3.构造器的特征
- 它具有与类相同的名称 。
- 它不声明返回值类型。(与声明为void不同)
- 不能被static、final、synchronized、abstract、native修饰,不能有 return语句返回值。