代码改变世界

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类型,他指向堆内存的某一个地址。对引用对象的任何操作多会影响到堆内存中的值。特别是在函数传参方面。

    image

    匿名对象:只使用一次的对象,成为匿名对象。典型常用方式:new Person().xxx();

    对象属性,方法:一个类包含了 属性和方法。那么每个具体对象的属性多是存放各自的内存空间中,互不干扰。但是方法是所有对象共用的。也就是说方法在内存只有一个。

    对象继承

  • 继承父类使用 extends 关键字。继承接口使用 implements 关键字。

  • 对象实例化顺序:

    1.static 静态 变量和方法。在new 之前,静态变量和方法并不依赖new 方法。这就是为什么我们可以直接使用的原因。当村长继承关系时: 父类static变量 ---->父类static方法 --->子类static变量 --->子类static方法

    2.非static 成员变量(普通的变量)。在new 之后。

    没有继承关系,初始化顺序:自己的变量 --->自己的构造函数

    有继承关系,初始化顺序:父类的变量 --->父类的构造函数 --->子类的变量 --->子类的构造函数

    3.非static 成员方法(普通的方法)。初始化顺序和普通的变量一样。

    image