封装性
封装就是保护内容,保证某些属性或方法可以不被外部看见,而在内部自己去处理。
class Person{
String name;
int age;
public void tell(){
System.out.println(“姓名:”+name+”年龄:”+age);
}
}
public class EncDemo01{
public static void main(String[] args){
Person per=new Person();
per.name=”张三”;
per.age=-30;
per.tell();
}
}
代码上没问题但是从实际出发,以上代码不符合要求。
实现封装
为属性封装:private属性类型 属性名称;
为方法封装:private 方法返回值 方法名称(参数列表){}
class Person{
private String name;
private int age;
public void tell(){
System.out.println(“姓名:”+name+”年龄:”+age);
}
}
public class EncDemo01{
public static void main(String[] args){
Person per=new Person();
per.name=”张三”; //错误无法访问封装属性
per.age=-30; //错误无法访问封装属性
per.tell();
}
}
访问封装内容
被封装的属性如果需要被访问,则需要编写setter以及getter方法完成。
如:private String name;
Setter(设置):public void setName(String n){} //用于属性赋值,命名规则将属性首字母大写并在前加上Set或者Get
Getter(取得):public void getNmae(){} //用于获取属性的值
class Person {
private String name;
private int age;
public void tell() {
System.out.println("姓名:" + getName() + ",年龄:" + getAge());
}
public String getName() {
return name;
}
public void setName(String n) {
name = n;
}
public int getAge() {
return age;
}
public void setAge(int a) {
age = a;
}
}
加入验证
Setter方法中加入验证
可以在setter方法中对设置的内容进行验证。
public void setAge(int a) { // 设置年龄
if (a >= 0 && a < 150) { // 在此处加上验证代码
age = a;
}
}
如下:
package com.stxy.demo0308;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
Person pr=new Person();
pr.setName(in.next());
pr.setAge(in.nextInt());
pr.tell();
}
}
class Person{
private String name;
private int age;
public void tell(){
System.out.println("姓名:"+getName()+"年龄:"+getAge());
}
public int getAge() {
return age;
}
public void setAge(int a) {
if(a>=0&&a<=150) {
age=a;
}
}
public String getName() {
return name;
}
public void setName(String n) {
name=n;
}
}