面向对象的第一个特征,先观察以下的代码,看是否会存在问题:
class Person{
// 属性
String name ;
int age ;
public void talk(){
System.out.println("姓名:"+name+",年龄:"+age) ;
}
};
public class OODemo05{
public static void main(String args[]){
Person p = null ;
p = new Person() ;
p.name = "张三" ;
<b>p.age = -30 ;</b>
p.talk() ;
代码本身没有任何的语法错误,但是从实际来看,存在错误的,造成错误的根本原因在于把内容暴露给了外部用户。
此时,就必须对所有的内容(不想被外部直接访问的)进行封装。
<b>private</b> String name ;
<b>private </b>int age ;
// 如果直接调用封装属性,程序是无法编译通过的
p.age = -30 ;
<b>修改代码:</b>
private String name ;
private int age ;
public void setName(String str){
name = str ;
public void setAge(int a){
if(a>0&&a<150)
age = a ;
public String getName(){
return name ;
public int getAge(){
return age ;
public class OODemo06{
// 如果要设置内容,则通过setter方法完成
p.setName("张三") ;
p.setAge(30) ;
所有的验证功能要求在setter方法之中完成,而getter方法只是把值简单的返回。
如果里面的属性是boolean值,则有以下两种返回方式:
private boolean flag ;
public void setFlag(boolean f){
flag = f ;
// 取得值的时候就有两种代码形式:
public boolean getFlag(){
return flag ;
public boolean isFlag(){
<b>练习:</b>
定义并测试一个名为Student的类,包括属性有“学号”、“姓名”,以及3门课程“数学”、“英语”和“计算机”的成绩,包括的方法有计算3门课程的“总分”、“平均分”、“最高分”及“最低分”。
<b>注意:</b>
· 所有的内容一定不要在类中输出,交给调用处输出。
· 所有的属性必须封装
/*
定义并测试一个名为Student的类,包括属性有“学号”、“姓名”,
以及3门课程“数学”、“英语”和“计算机”的成绩,
包括的方法有计算3门课程的“总分”、“平均分”、“最高分”及“最低分”。
*/
class Student{
private String stuno ;
private float math ;
private float english ;
private float computer ;
public float sum(){
return math + english + computer ;
public float avg(){
return this.sum() / 3 ;
public float max(){
float max = math>english?math:english ;
max = max>computer?max:computer ;
return max ;
public float min(){
float min = math<english?math:english ;
min = min<computer?min:computer ;
return min ;
public void setStuno(String s){
stuno = s ;
public void setName(String n){
name = n ;
public void setMath(float m){
math = m ;
public void setEnglish(float e){
english = e ;
public void setComputer(float c){
computer = c;
public String getStuno(){
return stuno ;
public float getMath(){
return math ;
public float getEnglish(){
return english ;
public float getComputer(){
return computer ;
public class OODemo08{
Student s = new Student() ;
s.setStuno("s001") ;
s.setName("张三") ;
s.setMath(90.0f) ;
s.setEnglish(89.0f) ;
s.setComputer(99.0f) ;
System.out.println("总分:"+s.sum()) ;
System.out.println("平均分:"+s.avg()) ;
System.out.println("最高分:"+s.max()) ;
System.out.println("最低分:"+s.min()) ;
本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/91233,如需转载请自行联系原作者