Java基础学习(面向对象)第五天
一,概述
面向对象的概念:
1,面向对象是相对面向过程而言。
2,面向对象和面向过程都是一种思想。
3,面向过程:强调的是功能行为。
4,面向对象:将功能封装进对象,强调具备了功能的对象。
5,面向对象是基于面向过程。
面向对象和面向过程的图解:
面向过程强调的是功能,面向对象强调的是具备某些功能的事物,通过这个事物实现功能。
二,面向对象特点
面向对象的特点:封装,继承,多态。
以后的开发其实就是找对象使用,没有对象就创建一个对象,找对象,建立对象,使用对象,维护对象的关系。
三,类和对象的关系
类:就是对现实生活中事物的描述。
对象:就是这类事物实实在在的个体。
如何描述对象:提取对象中共性内容,对具体的抽象。
映射到java中,描述就是class定义的类。
具体对象就是对应java在堆内存中用new建立的实体。
描述事物其实就是在描述事物的属性和行为。属性和行为共同称为类中的成员(成员变量和成员函数)。
描述汽车的类代码示例:
class Car
{
//描述颜色
String color = "红色";//显式初始化值
//描述轮胎数
int num = 4;
//运行方法。
void run()
{
System.out.println(color+".."+num);
}
}
四,成员 变量与局部变量
作用范围:
成员变量作用于整个类中。
局部变量作用于函数或者语句中。
在内存中位置:
成员变量(非静态)在堆内存中,因为对象的存在才存在。
局部变量:存在于栈内存中。
五,匿名对象
匿名对象是对象的简化形式。
匿名对象的使用方式:1,当对象的方法只调用一次时,可以用匿名对象完成,比较简化。2,可以将匿名对象作为实际参数进行传递。
六,封装
封装概念:封装是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。 封装 private:private(权限修饰符)私有只是封装的一种表现形式。
对外提供访问方式,以限制的方式访问。
封装原则:
1, 将不需要对外提供的内容都隐藏起来。
2,把属性隐藏起来提供公共方法对其访问。
七,构造函数
构造函数的特点:1,函数名于类名相同。2,不用定义返回值类型。3,不可以写return语句。
构造函数的作用:可以用于给对象初始化。
构造函数的小细节:当一个类中没有定义构造函数时,那么系统会默认给该类 加入一个空参数的构造函数。当在类中自定义了构造函数后。默认的构造函数就没用了。
构造函数和一般函数的不同?
1, 构造函数和一般函数在写法上不同。
2,在运行上不同,构造函数是在对象一建立就运行,给对象初始化。而一般方法时对象调用才执行,是给对象添加对象具备的功能。
3,一个对象建立,构造函数只运行一次。而一般函数可以被该对象调用多次。
什么时候定义构造函数?
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。
八,构造代码块
作用:给对象进行初始化。
对象一建立就运行,而且优先于构造函数执行。
和构造函数的区别:
构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。
构造代码块中定义的是不同对象共性的初始化内容。
九,this关键字
this:看上去是用于区分局部变量与成员变量同名的情况。
this到底代表的是什么呢? this:就代表本类的对象,到底代表哪一个呢?
this代表它所在函数所属对象的引用。简单说,哪个对象在调用this所在的函数,this就代表哪个对象。
this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。但凡本类功能内部使用到本类对象,都用this表示。
this语句:用于构造函数之间互相调用。
this语句只能放在构造语句的第一行。因为初始化要先执行。
this使用示例:
class Dog
{
private String name;
private int age;
/*
构造代码块。
作用:给对象进行初始化。
对象一建立就运行,而且优先于构造函数执行。
和构造函数的区别:
构造代码块是给所有对象进行统一初始化,
而构造函数是给对应的对象初始化
构造代码块中定义的是不同对象共性的初始化内容。
*/
{
System.out.println("dog code run");
run();
}
Dog()
{
//run();
System.out.println("A:name="+name+",,age="+age);
}
/*
this:看上去是用于区分局部变量和成员变量同名的情况。
this 为什么可以解决这个问题?
this到底代表的是什么呢?
this:就代表本类的对象,到底代表哪一个呢?
this代表它所在函数所属对象的引用。
简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
但凡本类功能内部使用到本类对象,都用this表示。
this语句:用于构造函数之间互相调用。
this语句只能放在构造语句的第一行。因为初始化要先执行。
*/
Dog(String name)
{
//run();
this.name = name;
System.out.println("B:name="+name+",,age="+age);
}
Dog(String name,int age)
{
//run();
//this.name = name;
this(name);//p(name);p这个对象的name的初始化,只能放在第一行。构造函数间调用。
this.age = age;
System.out.println("C:name="+name+",,age="+age);
}
Dog(int age)
{
this.age=age;
}
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
public void run()
{
System.out.println("run.............");
}
/*
需求:给狗定义一个用于比较年龄是否相同的功能。也就是是否是同龄狗。
*/
public boolean compare(Dog d)
{
return this.age==d.age;
}
}