面向对象,指的是基于对象的编程方法论,其中对象包含数据和方法。
一、
1、类和对象
1)、类是现实世界在计算机中的反映,它将数据和对这些数据的操作封装在一起。
类和对象是密切相关的,类可以实例化多个对象(但类本身并不占空间),实例化出的对象占有空间(用作储存成员变量)
class Student //类
{
public:
Student()
{}
private:
int _num;
char* _name;
int _age;
};
int main()
{
Student s; //对象-> 类的实例
system("pause");
return 0;
}
- 类的三大特性:封装、继承、多态。
- 、 封装:封装就是隐藏对象的属性和实现细节, 就可以直接从类外访问,函数的封装是一种形式,隐藏对象的属性和实现细节(函数内部),仅仅对外提高函数的接口和对象进行交互。
封装可以通过访问限定符来完成。
public:公有的,类的成员可以从类外直接访问;
private/protected:类的成员不能从类外直接访问
package Formula
public class Dog {
public static void main(String[] args) {
HelloWorld hw = new HelloWorld();
}
protected void info(){
System.out.println("i am animal");
}
Private B(){
System.out.println("this is B");
}
}
注意:
1、类的每个访问限定符可以多次在类中使用,作用域为从该限定符开始到下一个限定符之前/类结束
2、类中如果没有定义限定符,则默认为私有的(private)
3、类的访问限定符体现了类的封装性
4)、类的定义
在java中定义一个类,需要“class”关键字,一个自定义的类名以及一对程序体的大括号
[public][abstract|final]class<class_name>[extends<class_name>][implements<interface_name>] {
// 定义属性部分
<property_type><property1>;
<property_type><property2>;
<property_type><property3>;
…
// 定义方法部分
function1();
function2();
function3();
…
}
5)、类的大小
a.类的成员函数放在公共代码区,所有该类的对象共享这些成员函数,每个对象的大小为类内成员变量的大小之和。
b.在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属性的对象的大小。空对象大小(8byte)+int大小(4byte)+Boolean大小(1byte)+空Object引用的大小(4byte)=17byte。但是因为Java在对对象内存分配时都是以8的整数倍来分,因此大于17byte的最接近8的整数倍的是24,因此此对象的大小为24byte。
2、成员函数
1)、定义和使用成员函数
类外定义类外定义成员函数
class Student
{
public:
void display();//公用成员函数声明
private:
int num;
char name[20];
char sex;
};
void Student::display()//类外定义display函数,“::”是作用域运算符,在类外要加类名,不然就是全局函数
{
cout << "num:" << num << endl;//类函数必须先在“类体”中作“原型声明”,然后在“类外定义”
cout << "name:" << name << endl;//“类体位置”要在“函数定义”之前
cout << "sex:" << sex << endl;
}
还有内置成员函数;加入参数的成员函数;带返还类型的成员函数。
2)、函数参数的传递
a.简单数据类型采用值传递
对于基础数据类型,直接复制新的对应基础类型数据。
b.引用数据类型采用引用传递
对于引用类型,复制的是对象的引用。在不改变对象引用的情况下改变形参的成员变量数据,会影响到实际参数的变化。
3)、函数重载
如果一个类中有多个具有相同名称但参数不同,与返回值无关的方法,则称为方法重载。
a.通过改变参数的数量来实现重载
public static void main(String[] args) {
System.out.print(add(3,4));
}
//加法运算 两个整数的和
static int add(int a,int b) {
return a+b;
}
//加法运算 三个整数的和
static int add(int a,int b) {
return a+b;
}
b.通过更改数据类型来实现重载
public static void main(String[] args) {
System.out.print(add(3,4));
System.out.print(add(3.0,4.0));
}
//加法运算 两个整数的和
static int add(int a,int b) {
return a+b;
}
//加法运算 两个小数的和
static float add(float a,float b) {
return a+b;
}
3、构造函数
java构造函数,也叫构造方法,是java中一种特殊的函数。函数名与类名相同,无返回值。
一般用来初始化成员属性和成员方法的,即new对象产生后,就调用了对象了属性和方法。
构造函数是对象一建立就运行,给对象初始化,就包括属性,执行方法中的语句。而一般函数是对象调用才执行,用".方法名“的方式,给对象添加功能。
1)、构造函数的特点
1、构造函数函数名与类名相同
2、构造函数没有返回类型,如:String、void等
3、构造函数在类中没有体现出来,则默认有一个不带形式参数的默认构造函数
注:一般函数不能调用构造函数,只有构造函数才能调用构造函数。
2)、构造函数也分为有参数构造函数和无参数构造函数
3)、默认构造函数
当一个类中没有定义构造函数时,系统会给该类中加一个默认的空参数的构造函数,方便该类初始化。只是该空构造函数是隐藏不见的。
如下,Person(){}这个默认构造函数是隐藏不显示的。
class Person {
Person() {
//默认构造函数,默认不显示,若对构造函数重载后需要调用默认构造函数,则需显示定义默认构造函数
}
}
4)、构造函数的重载
构造函数也是函数的一种,同样具备函数的重载特性。