文章目录

  • 一、封装与隐藏
  • 二、封装性的体现
  • 三、构造器(构造方法)


一、封装与隐藏

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(注意

访问权限

java后端字段隐藏 java中的隐藏_面向对象编程

三、构造器(构造方法)

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语句返回值。