在创建一个类的时候 ,构造器创建有什么注意事项, 怎么选择里面变量,方法的封装方案,是public还是private。
构造器,在前文中介绍过,3种常见及推荐的构造模式:无构造器,有参数构造器,渐进构造器。
无构造是最常见的,大部分对象创建时,是不需要传入参数的。对象可以在后面使用的时候慢慢传入,不必一开始就传入。
有参数构造器,对象的创建,必须传入某参数,所以一个带参数构造器,要求使用时必须由参数,非常合理。
第三类是渐进阶梯型,前文有描述。要求构造器的参数从少到多一一写出来,有多个构造器,且构造器依次递进,真正的构造器都是最后一个,参数最多的构造器,而创建对象时,使用参数较少的构造器意味着,有部分参数采用该类推荐的构造器。
那么,为什么构造器的参数要由少到多?正面思考,阶梯型的构造器在意义上是完美的,另外想。如果两个构造器的参数相同,那么不排除会出现传入参数有概率同时满足两个构造器的情况。这样用起来就很复杂,所以如果要使用相同数量参数的构造器,一定要把传入的参数做好区分,竭力避免出现两种传入参数有交集。
做一个小练习来活动一下,下面是两个数量参数的构造器,那么实际上会选用哪个构造器呢:
public class StudyJava {
public StudyJava(Object a){
System.out.print("choose int ");
}
public StudyJava(long[] a){
System.out.print("choose long ");
}
public static void main(String[] args){
new StudyJava(null);
}
}
}
请问打印什么?
我在这里不给出答案,如果你想不清楚,那就恰好证明,阶梯参数构造器的优越性,如果对这个结果感到好奇,直接复制到程序里运行一下就会知道结果。
怎么选择里面变量,方法的封装方案?
其实对于一个程序设计的初期,public的方法和变量我们都了然于心,知道有哪些public的变量和方法。应该说private方法和变量是额外多出来的,那么
怎么理解Private方法,怎么理解private变量?
怎么理解Private方法,可以从代码重构来理解。代码重构是指对已经写好的代码进行改写和优化,从而使代码的可读性,可维护性,或者性能有一方面多种多方面的提高。关于方法的重构和private理解相关的有这两类优化。
一类,对于一个方法里面有很多行代码的,建议将其中有关联的一组代码拿出来用一个方法表示,增加可读性。比如,一个上百行代码的方法A,那是否可以将其中50行拿出来,他们其实完成了一个小功能,然后作为一个方法B,被方法A调用。
另一类,对于否一组代码,在两个及以上的方法中使用过,属于重复的代码,可以把这重复的代码拿出来,如此,这代码只用写一遍,而被多个方法调用,且在修改时,只用修改这个方法,而避免一改要修改好几个地方。
以上两类代码,就是典型的private方法的出处。Private方法里面进行的代码行为就是本来应该属于其他方法中的代码。
举个例子来理解private方法。
一个人的类,有一个吃的方法,这个方法是public的,该方法可以让人吃东西。
这个吃的方法,如果是一个单独的方法,那么可以想象,他是非常的长。所以,实际上我们会有很多private方法,比如咀嚼,吞咽等等。这些都是吃的子动作。
所以,我们可以肯定的说,所有的private方法都可以放到public的方法中,然后省略掉这个方法,即呈现一个类中,只有一定会被其他类调用的public方法,没有别的方法。当然,我们完完全全不建议这么做,反而提倡使用一定量的private方法,使代码可读性提高,维护性提高,单个方法长度有限。
怎么理解private变量?
理解private变量,可以从两种情况理解。
情况1 :可以先理解局部变量。局部变量是出了那个范围就不存在的变量。 最典型的局部变量就是for循环里面的int i 。当for循环结束后,我们不再关心i的值,也不会再for循环之外使用i的值。
Private变量就是以类(或对象)为“局部”的“局部变量”。一个类中有一个变量,这个变量,不会再外部使用到,但是在类中,会被两个及以上的方法所使用,或者被一个方法,多次使用,且使用时,需要用到之前的数据。 就会成为private变量。
情况2:和private方法不同。Private变量并非都不能被外部所使用。还有一种情况是为了防止变量被直接修改,而通过set和get,或者类似的方法来进行变量修改。
Private封装一部分是为了保护,更多时候是没必要公开给别人,所以使用private。而public直接就对应着类的功能和特征,在写的时候,一定会被外界调用就是public参数方法的特点。
一个类就是由构造器,变量和方法组成。类应该是有物理意义,有明确的权利和职责范围的一个实际概念。 所以面向对象编程方法是目前编程方法中,与人类分工方式极为相似的一种编程方法。