java中容易忽略的小细节

时间:2022-08-27 15:44:20

如果问大家private 、public和protected 这些修饰符的具体概念,想必大家肯定能回答的出,对了还有一种默认的访问权限 就是没有这些修饰符时(在同一包下,都能被访问);但是大家有没有想过为什么会出现private了?
那我们从它的字面意思来理解一下:被private修饰只能被当前类访问,即使当前的类被继承,导出类也不能访问(这也是和protected的唯一区别之处);好了从字面上我们知道什么意思了,我在这里要讲的一个重要概念时,在程序开发过程有两种程序员,一个类程序员,一个客户端程序,类程序员当然是创建一个类的,他可能就创建类,供客户端程序使用,那么问题来了,类程序员创建的类,在提供给客户端程序员使用的时候,如果客户端程序员不小心修改了该类的成员,那么这个万一被改坏了,那么这个类的使用就会收到影响,因此,利用private封装起来的成员往往就是类最薄弱的地方,不想被外部访问和修改。
可能在开发的过程中,我们大家,有时候会充当一部分的类程序员的身份,我在这里希望大家能够合理的利用private,做一个有思想的程序员;
下面再给大家讲一个概念:java的多态特性,说起多态大家肯定不陌生,可能有的读者会对此概念模糊,我在此给大家好好讲讲一下。
举个例子:如人类(作为基类),歌星(导出类),普通人(导出类),这些导出类 都有singSong();方法,可想而知,他们的唱歌方式和方法都不同对吧,那么我们下面这样定义一下

Singer singer= new Singer();
AveragePerson  aPerson= new AveragePersong();




doSingSong( People people){

people.singSong();
};




下面就调用这个方法

doSingSong(singer);



那么问题来了上面的到底调用谁的singSong();方法了?可能有人会说当然是调用歌星的啦,可是我想问你有没有看清这个方法的参数类型了?我指定的是People ,为什么能传Singer类型,这就涉及到多态了,导出类向父类的向上转型。
而且上面的方法也不是说,是Singer,就要这么做,是AveragePerson 需要那样做,这段代码的主要意思是我知道你是一个People,你能singSong();那么就去做吧,但是要注意细节的正确性;
doSingSong不知为何它总做了该做的,而我们不需要在此代码里不用进行类型的判断,大家可以想想,如何是这样子的话,有新的导出类出现,那么我们每次执行这个方法还要判断一次,岂不是太复杂,正是因为多态,才使得事情能够正确的处理,编译器和运行系统会处理相关的细节。好了今天先给大家讲到这,希望从基础着手,理解面向对象的设计理念,大家也能设计出好模式,码出优雅的代码!