java中容易忽略的小细节
2016-07-15 11:27
381 查看
如果问大家private 、public和protected 这些修饰符的具体概念,想必大家肯定能回答的出,对了还有一种默认的访问权限 就是没有这些修饰符时(在同一包下,都能被访问);但是大家有没有想过为什么会出现private了?
那我们从它的字面意思来理解一下:被private修饰只能被当前类访问,即使当前的类被继承,导出类也不能访问(这也是和protected的唯一区别之处);好了从字面上我们知道什么意思了,我在这里要讲的一个重要概念时,在程序开发过程有两种程序员,一个类程序员,一个客户端程序,类程序员当然是创建一个类的,他可能就创建类,供客户端程序使用,那么问题来了,类程序员创建的类,在提供给客户端程序员使用的时候,如果客户端程序员不小心修改了该类的成员,那么这个万一被改坏了,那么这个类的使用就会收到影响,因此,利用private封装起来的成员往往就是类最薄弱的地方,不想被外部访问和修改。
可能在开发的过程中,我们大家,有时候会充当一部分的类程序员的身份,我在这里希望大家能够合理的利用private,做一个有思想的程序员;
下面再给大家讲一个概念:java的多态特性,说起多态大家肯定不陌生,可能有的读者会对此概念模糊,我在此给大家好好讲讲一下。
举个例子:如人类(作为基类),歌星(导出类),普通人(导出类),这些导出类 都有singSong();方法,可想而知,他们的唱歌方式和方法都不同对吧,那么我们下面这样定义一下
下面就调用这个方法
那么问题来了上面的到底调用谁的singSong();方法了?可能有人会说当然是调用歌星的啦,可是我想问你有没有看清这个方法的参数类型了?我指定的是People ,为什么能传Singer类型,这就涉及到多态了,导出类向父类的向上转型。
而且上面的方法也不是说,是Singer,就要这么做,是AveragePerson 需要那样做,这段代码的主要意思是我知道你是一个People,你能singSong();那么就去做吧,但是要注意细节的正确性;
doSingSong不知为何它总做了该做的,而我们不需要在此代码里不用进行类型的判断,大家可以想想,如何是这样子的话,有新的导出类出现,那么我们每次执行这个方法还要判断一次,岂不是太复杂,正是因为多态,才使得事情能够正确的处理,编译器和运行系统会处理相关的细节。好了今天先给大家讲到这,希望从基础着手,理解面向对象的设计理念,大家也能设计出好模式,码出优雅的代码!
那我们从它的字面意思来理解一下:被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不知为何它总做了该做的,而我们不需要在此代码里不用进行类型的判断,大家可以想想,如何是这样子的话,有新的导出类出现,那么我们每次执行这个方法还要判断一次,岂不是太复杂,正是因为多态,才使得事情能够正确的处理,编译器和运行系统会处理相关的细节。好了今天先给大家讲到这,希望从基础着手,理解面向对象的设计理念,大家也能设计出好模式,码出优雅的代码!
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树