一篇关于面向对象理解的文章推荐:面向对象编程,我的思想
http://blog.youkuaiyun.com/flashmagic/article/details/19999
笔记:
类描述了一组有相同特性(属性)和相同行为(方法)的对象
类是属性与方法的集合
对象具有类所描述的所有的属性以及方法
可以把函数想象成一个“实现某种特定功能的黑匣子”
面向对象的编程语言最大的特色就是可以编写自己所需的数据类型
我们一般会把类的属性声明为私有的,而把类的方法声明为公共的
对象调方法,方法改属性
声明只是告诉计算机将要有这样的一个变量(对象),在内存中它并不为这个变量(对象)分配内存
只有在定义的时候才会给这个变量(对象)分配内存
千万不要有这种想法:“试图对类进行操作!”
在创建对象时计算机只给这个对象的所有的属性分配了内存,而并没有给方法分配内存。方法只有一个,是属于所有的对象的,所以无论创建了多少个对象,计算机只会为一个方法分配一块内存
构造函数是类中最特殊的函数
从特征上来说:1.它是编程语言中唯一没有返回值类型的函数。
2.它的名称与类的名称必须要完全相同。
3.它必须被声明为公共(public)的类型
4,可以对构造函数进行重载。
5.它在创建对象是自动被调用。
从功能上来说:1.它是对类中的属性进行初始化。
提倡的是自己定义构造函数,而不是用系统的默认构造函数
public employee(String n,int a,char s,float e,boolean l){ //看这个构造函数
name = n; //设置员工姓名
age = a; //设置员工年龄
sex = s; //设置员工性别
emolument = e; //设置员工薪水
lunch =l; //设置员工午餐
}
jingwei = new employee("jingwei",20,'M',100,false);重载与重构:
在JAVA中:
1. 函数重载是一个类中声明了多个同名的方法,但有不同的参数个数和参数类型。
2. 函数重构是指在子类中声明与父类同名的方法,从而覆盖了父类的方法。重构解决了子类与父类的差异问题。
在C++中:
1. 重载的概念一样。
2. 重构的概念可就不一样了,C++中功能更为庞大的虚函数。
public class employee{
public employee(String n,int a,char s,float e,boolean l){ //看这个构造函数
name = n; //设置员工姓名
age = a; //设置员工年龄
sex = s; //设置员工性别
emolument = e; //设置员工薪水
lunch =l; //设置员工午餐
}
public employee(){ //请注意这个函数没有参数
name = “jw”;
age = 20;
sex = ’W’;
emolument = 99;
lunch = true
}
//……等等
};
重载普通的函数与重载构造函数大同小异,不过他多了一个 this 指针! this 一般是对当前对象的引用。这么说吧,如果涉及到两个以上的对象时就会使用 this 指针。每个成员函数都有一个 this 指针,它是一个隐藏的参数, this 指针只向调用它的对象!我说过方法只有一份,而对象都有自己的属性,当对象调用方法来先是属性的时候,他怎么来判断调用的时不是自己的属性呢?这就需要 this 指针来大显神威了。把一个变量或函数声明为静态的需要“static”这个关键字。声明静态的目的是“为某个类的所有对象的某个属性或方法分配单一的存储空间”。静态的数据是属于类的,不属于任何的对象。静态的数据在声明的时候系统就为他分配了内存空间,而不用等到创建对象时。
关于静态函数我想就没什么可多说的了。给我的感觉就是,它也是属于类的,在定义的时候就分配的内存。调用是可以使用类名直接调用。其他的和普通成员函数没什么不同的了不过这里需要说明的一点是:在JAVA中,静态的成员函数只能修改静态的属性,而静态的属性可以被所有的成员函数修改。不过在C++中就没这么多事儿了!
子类的对象拥有父类的所有的属性和方法
在创建一个子类对象时首先要调用的是父类的构造函数,然后再调用子类的构造函数,毕竟,子类的构造函数不包括父类的属性的初始化功能!