一篇关于面向对象的理解和类、对象,Java的三大特性

一 面向对象(Object Oriented ,OO): 审视视角:在现实中,而客体往往是问题的主角,如把大象装入冰箱中,无论要怎么装,始终都是围绕大象和冰箱

一 面向对象(Object Oriented ,OO):

审视视角:在现实中,而客体往往是问题的主角,如把大象装入冰箱中,无论要怎么装,始终都是围绕大象和冰箱来展开讨论实施。

(摘自百度百科):通常人类观察问题的视角是这些客体,客体的属性反应客体在某一时刻的状态,客体的行为反映客体能从事的操作。这些操作附在客体之上并能用来设置、改变和获取客体的状态。任何问题域都有一系列的客体,因此解决问题的基本方式是让这些客体之间相互驱动、相互作用,最终使每个客体按照设计者的意愿改变其属性状态。结构化设计方法所采用的设计思路不是将客体作为一个整体,而是将依附于客体之上的行为抽取出来,以功能为目标来设计构造应用系统。这种做法导致在进行程序设计的时候,不得不将客体所构成的现实世界映射到由功能模块组成的解空间中,这种变换过程,不仅增加了程序设计的复杂程度,而且背离了人们观察问题和解决问题的基本思路。另外,再仔细思考会发现,在任何一个问题域中,客体是稳定的,而行为是不稳定的。

对象就是人们要进行研究的事物,一般是具体具有一定具体属性事物。对象的抽象就是类,具有相同属性和行为的事物的集合叫做类。类虽然具有属性和行为,但类无法直接操作这些属性和操作,必须要通过实列化一个对象,通过对象来将来操作这些属性和行为。这样我们就知道,类是抽象的,对象是类中的一个具体的客体。因此类和对象的关系是 :对象 is  a  类,如狗是一个动物。同时对象因为是类的一个实体,具有类的属性和行为。

Java 的三大属性:

封装性:这也是面向对象设计的初衷之一,在结构化设计中,人们往往是将个体的行为和属性抽取出来,通过改变属性和行为去完成操作,这样一是繁琐,二是不能保证安全性(因为所有的内容都暴露出来)。而面向对象设计中,是将抽象得到的属性和行为进行结合,封装形成类,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。这样就保存和数据和成原的安全性和简洁性。

Java通过修饰符将类经行边界的划分:

 

继承性:继承可以使得子类在获得父类某些属性和方法的同时,不需要重写代码(父类私有的不能被继承)可以有自己独特的属性和方法,,也可以覆盖父类的方法,使其和父类不同需。继承的意义:提高了代码的复用率,提高了代码的可维护性(比如有许多类都继承了统一个父类,即同一个方法都被放到同一个类中,这样可以通过修改父类的代码完成修改)。让类与类之间产生关系,时多态性的前提。Java支持单继承和多实现。

 

多态:在面向对象中,多态主要体现在向不同的对象发送同一个信息,不同的对象在接收时会产生不同的行为(即方法),对象可以用自己的方法去响应共同的信息。( 多态:在同一个时刻,体现出来的不同状态)。一个父类的引用既可以保存父类对象的地址,也可以保存子类对象的地址,即一个父类的引用它既可以指向父类对象也可以指向子类对象,它可以根据当前时刻指向的不同,自动调用不同对象的方法,这就是多态.

 

多态性主要体现在两个方面:方法重载实现的静态多态性(编译时多态)

                                          方法重写实现的动态多态性(又称动态连编)

多态的好处:
可以提供代码的复用性:继承保证

可以提高的代码的扩展性:由多态保证...  (父类的引用指向子类对象)

 多态的弊端:
父类引用指向子类对象,

   通过父类的引用调用子类特有功能,不能调用....

      不能访问子类特有功能
  Father3 f  = new Son3() ;   父类的引用指向子类对象 (向上转型);

父类对象和子类对象的转化需要注意如下原则:

一:子类对象可视为是其父类的一个对象

二:父类对象不能被当做是其某一个子类的对象

三:如果一个方法定义的是父类对象,那么调用这个方法时,可以使用子类对象作为实际参数。

 

主要要注意的几个点:

1,static语法涉及: 如果一个成员前面加一个static,意味着这个成员不再是属于某个类对象的,而是被n个对象所共有的,即静态成员属于类本身的,由操作系统只分配一块内存空间,大家共同使用这一块内存空间,对同一个变量进行操作
不同的类对象,其属性所占的内存空间不同,但是却公用相同的方法,方法只在代码区分配一块存储空间,大家共同使用这一块内存空间
静态的属性和方法属于类本身的,可以通过类名的方式进行访问
创建完类对象之后,系统首先为这个对象分配好内存空间,然后由类自动调用相应的构造函数

2 多态的注意事项:

1>通过父类的引用只能访问子类对象从父类继承过来的成员,但是不能访问子类对象所特有的成员(父类引用强制转化为子类的引用的原因)
2>父类的引用永远不可能直接赋给子类引用,否则会出错,只有在父类的引用本身指向的就是子类对象的时候,才可以将父类引用强制转化为子类的引用(其它情况下不允许将父类的引用强制转化为子类的引用,否则运行的时候会出错)

向上转型:Animal dog = new Dog(); jvm自动转型,但是改对象只能引用父类的方法或子类覆盖的方法,子类所特有的不能被对象使用;

向下转型:2种方法:1)Animal animal = new Anima() ; Dog dog = (Dog)animal;这种转型方法存在隐患,比如dog并不是Animal的一个子类。

          2)Dog dog = new Animal();   Dog dog2 = (Dog) dog;这种方法没有安全隐患

          或者用 instanceof 来判断:if(animal instanceof Dog)  

                          Dog dog2 = (Dog) dog;

向上转型的作用,减少重复代码,父类为参数,调有时用子类作为参数,就是利用了向上转型。这样使代码变得简洁。体现了JAVA的抽象编程思想。