一起学java简单点:如何用好成员变量和类方法(一)

作为一个c和js程序员,以前没接触过java,重新开始学习,跟着大家一点点进步。

1. 面向对象

       面向对象和面向过程,我理解的意思是一个需要内聚,一个需要耦合。举个例子吧,比如描述一件事情:一个医生要给我做一个阑尾的手术。

       如果是面向过程,这件事描述的时候就是按顺序的方式描述,first怎么样,then怎么样,finally怎么样;

       如果是面向对象,这件事情的描述跟过程其实还是一样的,需要顺序的方式,但它主要的区别在于结构的封装,我们来提取一下这个事情的元素,我们可以看到的元素是:医生、我、阑尾、做手术,那么我就可以来进行封装了,首先封装两个对象,医生和我,阑尾是我的一部分,做手术是医生的行为。所以这件事情就变成了:医生.做手术(我.阑尾)。

       我用伪代码的形式来描述一下可能更清晰吧:

public class Doctor{
    void operation( String position);  //做手术
}
public class Patient{
    string patient_position = "阑尾";   //阑尾
}
public class OperationTest{
    public static void main(String[] args){
        Doctor doctor = new Doctor();
       Patient me = new Patient();
       doctor.operation(me.patient_position); //医生给我的阑尾做手术 
    }
}

       有人会询问,为什么这么简单的一件事情,一句话都可以说完,还需要这么麻烦,建立3个类,用c来写只有一个main函数就解决了。其实对于这个事情来说,确实麻烦了,但是往往事情会非常复杂,比如说现在事情变成了有3个医生要给我2个器官做手术,这个手术要做好几次,其中还有护士,做手术过程很复杂.......当然这只是一个例子,如果我是面向过程的,我想作为IT人的你,以后要维护和修改你一定会疯掉的。

       不然是面向过程也好,面向对象也好,其实描述事情都没有变,该怎么顺序还是怎么顺序,面向对象更多的是增加了对象的设计,面向对象编程思想才是我们真正需要学习的。

2. 成员变量和类方法

       上面就是java面向对象的写法,但其实还没有真正的面向对象,我们来看看类当中两个必不可少的元素:成员变量和方法,成员变量好比类的成分,而方法就好比类的行为。我们来改一下需求,如果这次做手术不是阑尾手术,而是脊椎手术,很多人应该会这么写:

Patient me = new Patient();
me.patient_position = "脊椎";
doctor.operation(me.patient_position);

       这样写没有问题吧,但细思极恐啊,想想,如果有人心怀不轨,把脊椎变成了"心脏",那我岂不是任人宰割,太危险了。有人告诉我可以把成员变量变成private私有化,就可以不用修改了,这样做是没错的,但是连医生都没办法改了,要做别的手术怎么办?所以这里就要用到类方法,我把他叫做”成员变量方法化“,为了保护私有成员,但同时有需要读取相应的值或者赋值,做一些约束的话,我就通过方法的办法来完成。比如:

public class Patient{
    private string patient_position;  
    public string getPatientPosition(){
        return patient_position;
    }
    public void setOperationPosition(string position){
        patient_position = position;
    }
}
public class OperationTest{
    public static void main(String[] args){
        Doctor doctor = new Doctor();
       Patient me = new Patient();
       me.setOperationPosition("阑尾");
       doctor.operation(me.getPatientPosition()); //医生给我的阑尾做手术 
    }
}

       这样一来,通过用get和set的方法,让做手术的部位至少都得需要我来同意了,不能别人说改就改了。但别人就会说,直接在函数里调用setOperationPosiont()不是跟原来一样么,没有增加任何安全呀!这里我要说一下,你一旦用方法来约束更改成员变量了,那么好处就是你可以在set函数里作文章,比如你可以在函数里设置只有医生能更改权限,以及哪些部位是完全不能更改的,不像之前直接调用成员变量,要么都能改,要么都不能改。

       其实这只是一个很简单的例子,是为了更好地理解面向对象的意义,java只是面向对象编程的一种语言而已,语法本身次要,重要的在于思想,也就是解决问题的能力。面向对象如何才能真正面向对象,需要我们如何将类抽象出来,后面我继续学习的时候还会进一步给大家分享。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值