初学者的java思想

来源:互联网 发布:mac pro cpu型号 编辑:程序博客网 时间:2024/04/29 11:26

    学了将近一个月的java,最得意的地方就是了解到java的面向对象的思想。与以前学习的C/C++语言相比java在语法上几乎是继承了C/C++语言,而面向对象的思想却更为纯粹。
   
所谓面向对象是指把要做的事和各种信息放到一个类里面,用属性和行为来表示。类的实例就是对象,在程序中完成任务的机制就是这些对象的行为,以及对象与对象之间的信息交流。
   
面向对象的三大特性:继承、封装、多态。
   
继承:涉及到了父类与子类,父与子类到底是一种什么关系呢?搞清了这个,继承就掌握了。并不是什么父子关系,而是一个从属关系,一句话,子类是父类的一种,父类在范围上比子类大。如果说动物是一个父类,那么人就是子类,人自然会拥有动物所有的属性和行为,因为人是动物的一种,动物有寿命、体重、会生、会死、摄食,同样人有寿命、体重、会生、会死、摄食,这就可以看出子类可以拥有父类的属性和行为。但是人的行为有自己的特殊性,如人的摄食方式,在动物界是特有的,这就说明了子类可以把继承来的行为用自已方式来实现。不仅人的行为与其他动物的不同,人还有自己拥有而其他动物没有的行为,如人会说话,人会思考等,这就说明了子类可以有自己特有的行为和属性
   
封装:1把属性和行为包装成一个类,用类的实例实现。2隐藏了实现的细节,只需给定方法名与参数类型3访问权限的控制。以上三点是老师总结,但要把它们完全的理解还要花一些心思,特别是第2点和第3点,第2点是说类在给来用时不必了解它是怎么实现的,你只要知道它是干什么的,拿去用就好了,提高程序的可读性,可重用性,第3点是指类的成员可以用public,private等这些关键字来修饰,控制访问权限,如在javaBean中,所有的属性都是private的,而对应的settergetter方法都是public的,这样就把属性的读和写的权限分离了,对某些属性如密码为了只给可写的属性,可以不去写它的getter方法,而某些属性如学生的成绩,对于学生就是只读的,只把Setter方法暴露给学生。
   
多态:这是面向对象最优秀的地方,大致可以描述为:相同的事物,相同的方法,相同的参数,得到的结果却不同。为什么会这样呢,这是因为子类以父类的身出现了(这不需任何的条件就可以实现)不同的子类有相同的父类,用父类的名义声名方法的参数则不同的子类的实例都可以被该方法调用,但是却是以自的方式来实现的。举个例子,有一个Cattom,有一Bridjacky,它们现在都以动物的身分出现,现在来调用它们的run()方法,tom显然是跑了,而jacky一定是飞。多态在实际的编程中有很大用处,如在集合中Collection有两个子接口ListSet,List接口有ArrayListLinkedList两个子类,而SetHashSetTreeSet两个子类,在使用collection时一般是这样的List list=new ArrayList(),其中list就是一个以父类身分出现的对象,在使用的时候跟本就不用知道是用ArrayList()实现的还是用LinkedList实现的,只要去调用List中的方法就行了,这样就简化程序的编写。还有在传参数时并不知道传来的是一个什么类型的对象,我们来声方法时参数可以用父类声明,当值传来以后再进行判断它的类型,然后向下转型为对象实际的类型,这样就可以调用子类特有的方法了,这叫做RunTime Type Identify,执行期类型鉴定
   
接口更是java中的经典。
    java
面向对向的特性与C++不同之处在于,C++的类可以多重继承,而java不可以,这样就避免了子类复用不同类中方法时所出现的重名问题,如果重名程序在运行时就不知道到底该继承哪个父类的方法。而java是用接口来实现类似多重继承的功能,因为接口中只有抽象方法,必需由子类来重写(更却确的讲是实现),这样不管多个接口中的方法是否重名,程序只会执行子类中实现的方法,不会发生冲突

 
原创粉丝点击