封装(encapsulation)
概念:
将类的某些信息隐藏在类内部,不允许外部程序直接访问,
而是通过该类提供的方法来实现对隐藏信息的操作和访问
封装解决什么问题:
如果任何一个处理类都可以直接对new 的类进行赋值操作,那么当值不准确的时候,可能会产生额外的结果,
如何在赋值的同时添加一些逻辑判断呢?
封装可以解决此问题
作用:
使用封装可以保证数据的规范,不符合规范的数据将无法进行操作
好处:
1、隐藏类的内部实现细节
2、只能通过提供的方法进行访问,其他方法无法访问
3、可以根据需求添加复杂的逻辑判断语句
4、方便修改实现
面向对象的封装(狭义)可以用一句话概述: 为了保证数据安全和规范
将类中的属性设置为私有属性,提供共有的外部方法供程序进行调用,可以实现丰富的细节操作
广义的封装:
可以将完成特定功能的代码块封装成一个方法,供不同的程序进行调用
/*
* 定义类的时候需要包含以下组件:
* 私有属性
* 构造方法(无参构造方法和自定义构造方法)
* set/get方法
* 普通方法
*
*
*
* */
public class Dog {
private String name;
private int age;
private String color;
public Dog(){
}
public Dog(String name,int age,String color){
this.name = name;
if(age>0){
this.age = age;
}else{
System.out.println("年龄不规范");
}
this.color = color;
}
public void setAge(int age){
if(age>0){
this.age = age;
}else{
System.out.println("输入年龄不规范,重新输入");
}
}
public int getAge(){
return this.age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setColor(String color){
this.color = color;
}
public String getColor(){
return this.color;
}
public void eat(){
System.out.println("eating 骨头");
}
public void play(){
System.out.println("palying....");
}
public void show(){
System.out.println("name:"+this.name);
System.out.println("age:"+this.age);
System.out.println("color:"+this.color);
}
}
public class DogTest {
public static void main(String[] args) {
Dog dog = new Dog();
dog.setAge(20);
System.out.println(dog.getAge());
}
}
访问控制符
在java中明确定义了访问权限:
限制访问,以下分类按照从大到小进行排列
public:公共的
当前项目的所有的类都可以进行访问
protected:受保护的
可以被当前类访问,可以被当前包访问,也可以被子类访问
default:默认权限
可以被当前类访问,可以被当前包访问,
private:私有权限
只能被当前类访问
注意:四种访问修饰符可以修饰属性和方法
类的访问修饰符只有两个 public default
封装要点:
类的属性的处理:
1.一般使用private. (除非本属性确定会让子类继承)
2.提供相应的get/set方法来访问相关属性. 这些方法通常是public ,从而提供对属性的读取操作。 (注意:boolean变量的get方法是 用:is开头!)
一些只用于本类的辅助性方法可以用private,希望其他类调用的方法用public