package com.atguigu.java;
/*
* 面向对象的特性之:封装性
* 一、为什么要使用封装性
* 但我们创建对象以后,可以通过对象名.属性名对的方式对属性进行赋值,这种方式默认只能对内容的类型和范围(数据类型本身的取数范围)进行约束
但是在实际开发中,往往我们还会有更的限制条件,但是这些限制条件无法在属性中声明,所有采用如下方式:
1.使用private修饰属性,这样就不能通过对象名.属性名对的方式对属性进行赋值了
2.提供公共 public的方法给属性赋值或者获取属性值,这样就可以把限制条件写在方法中
二、封装性的体现(狭义上)
私有化属性,提供公共public的set/get方法
三、封装性的体现(广义上)
1.四种权限修饰符都可以用来做封装
2.可以用四种权限修饰符修饰:属性、方法、构造器、内部类。代码块不行
3.class只能用public和default(缺省)修饰。
四、set/get方法就是普通方法,如果开心可以随意起名。
*/
class Animal{
String name;
int age;
private int legs;
/**
* 获取属性值
* @return
*/
public int getLegs(){
return legs;
}
/**
* 给属性赋值的方法习惯性的命名为setXxx,获取属性值的方法习惯习惯性的命名为getXxxx
* @param l
*/
public void setLegs(int l){
if(l !=4){
System.out.println("给我去死!!");
//赋值一个默认值
legs = 4;
}else{
legs=l;
}
}
public void info(){
System.out.println("name "+name+"age "+age+"legs "+legs);
}
}
public class AnimalTest {
public static void main(String[] args) {
Animal animal = new Animal();
animal.name= "二哈";
animal.age=2;
animal.setLegs(-4);
animal.info();
}
}
练习题:
1.创建程序,在其中定义两个类:Person和PersonTest类。定义如下:
用setAge()设置人的合法年龄(0~130),用getAge()返回人的年龄。在PersonTest类中实例化Person类的对象b,调用setAge()和g
package com.atguigu.exer3;
class Person{
private int age;
/**
* 获取属性值
* @return
*/
public int getAge(){
return age;
}
/**
* 给属性赋值:0-130
* @param a
*/
public void setAge(int a){
if(a>=0 && a<=130){
age=a;
}else {
System.out.println("年级不合法");
age=10;
}
}
}
public class PersonTest {
public static void main(String[] args) {
Person b = new Person();
b.setAge(200);
System.out.println(b.getAge());
}
}
etAge()方法,体会Java的封装性。