java 面向对象
2012-01-11 17:11 Rainbow 阅读(453) 评论(0) 编辑 收藏 举报java最大的特色就是面向对象。面向对象的三大特性:封装,继承,多态。面向对象的内容非常庞大,基本上很少能在一个文章说完,就直接说说一些常见的问题吧。
封装
封装这个特性,从字面上应该多能理解。就是将一定独立功能或者数据按一定的约定俗成的方式组织起来。这个没有太多异议。就不多说了。
继承
java不支持多继承,那样会是程序变的复杂和不可控。所以只允许继承一个父类,可以多个接口。
多态
多态应该是面向对象最重要的内容也是最迷糊的地方。起码我在好长时间内没有明白多态的含义。多态说白了就是多种状态,也就是说同一个操作能产生的结果是不一样的。通常,多态伴随着继承而来。他们是密不可分的。
面向对象的基础
public class Person { private int age; //私有字段 public int getAge() //get属性 { return age; } public void setAge(int age) //set属性 { this.age = age; } public Person() //无参构造函数 { age=0; } public Person(int age) //有参构造函数 { this.age=age; } }
上面是一个典型的类定义。public 是对类的访问级别。class是关键字。Persion是类名,在java中文件名必须和一个public类型的类名保持一致。
- 构造函数:
和类名一致,无返回类型的函数。一个类中默认会有一个无参的构造函数,就算没有手动书写,java也会自动添加。既然有无参构造函数,那肯定就有有参构造函数了。这样一来,一个类里面可以有多个构造函数的存在。这样就是方法重载的概念。
- 对象的出生:
当你抽象出类以后,其实并不能在程序中使用。必须创建一个具体的对象才能有意义。创建对象就直接使用 new关键字。新建一个对象。
Person Andyliu=new Person();创建了一个刘德华(Andyliu)具体对象,当我们不知道他的年龄时,可以使用默认构造函数。new Person() 这个操作做了三件事:1.为对象开辟堆内存空间。2.调用Person类的构造方法 ()。3.返回新建对象的内存地址。
当一个具体的对象创建成功以后,必须要有地方(内存)去存放它。java中值类型存放在 栈内存中,而引用类型存放在 堆内存中。Andyliu 是Person类型,他指向堆内存的某一个地址。对引用对象的任何操作多会影响到堆内存中的值。特别是在函数传参方面。
匿名对象:只使用一次的对象,成为匿名对象。典型常用方式:new Person().xxx();
对象属性,方法:一个类包含了 属性和方法。那么每个具体对象的属性多是存放各自的内存空间中,互不干扰。但是方法是所有对象共用的。也就是说方法在内存只有一个。
对象继承
继承父类使用 extends 关键字。继承接口使用 implements 关键字。
对象实例化顺序:
1.static 静态 变量和方法。在new 之前,静态变量和方法并不依赖new 方法。这就是为什么我们可以直接使用的原因。当村长继承关系时: 父类static变量 ---->父类static方法 --->子类static变量 --->子类static方法
2.非static 成员变量(普通的变量)。在new 之后。
没有继承关系,初始化顺序:自己的变量 --->自己的构造函数
有继承关系,初始化顺序:父类的变量 --->父类的构造函数 --->子类的变量 --->子类的构造函数
3.非static 成员方法(普通的方法)。初始化顺序和普通的变量一样。