面向对象
一、概念:面向对象是相对于面向过程而言的,面向对象和面向过程都是一种思想,一种理解方式。但是面向过程强调的是功能行为,而面向对象是将功能封装进对象,强调具备了功能的对象。面向对象是基于面向过程的,面向过程到面向对象的转变,能让复杂的问题简单化,能让我们的角色由执行者转变为指挥者。
例如:冰箱装大象的事情:有三个功能:打开 储存 关闭
如图所示:面向过程强调的是打开冰箱 存储进冰箱 关闭冰箱三个功能,而面 向对象则是把这三个功能存储在冰箱这一对象中,只要找到冰箱这一对象,就可以调用这三个功能。
二、面向对象有三个特征:封装 继承 多态
程序的开发其实就是找到相对应的对象并使用的过程。如果没有对象就创建一个对象。总的来说就是,找对象、建立对象、使用对象、维护对象的过程。
类和对象的关系:
类就是对现实生活中事物的描述,映射到java中就是class定义的类
对象就是这类事物实实在在存在的实体,映射到java中就是在堆内存中用new建立的实体。
描述事物其实就是描述事物的属性和行为,属性对应类中的变量,行为对应类中的函数,就是方法。定义类,就是在描述事物,就是定义属性和行为。属性和行为共同成为类中的成员(成员变量和成员方法)。
例如:建立一个描述汽车的类,其中包括汽车的颜色 轮胎的数目。
1
2
3
4
5
6
7
8
9
|
class Car
{ String color= "红色" ; //描述颜色
int
num= 4 ; //描述轮胎数
void
run() //运行行为
{
System.out.println(color+ ".." +num);
}
} |
内存中的样子:
成员变量和局部变量的区别:
1.作用范围:成员变量作用于整个类中,有默认的初始话值。局部变量作用于函数或语句中,需设定初始化值否则不能参与运算。
2.在内存中的位置:成员变量在堆内存中,因为对象的存在,才在堆内存中存在,而局部变量存在在栈内存中。
匿名对象的使用:
1.当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化,但如果对一个对象进行对个成员调动,必须给这个对象起名字。
2.可以将匿名对象作为实际参数进行传递。
封装:
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式
好处:将变化隔离、便于使用、提 高重用性、提高安全性。
封装的原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。
private :私有,权限修饰符:用于修饰类中的成员(成员变量 成员函数)。私有只在本类中有效。私有仅仅是封装的一种形式。
例如:创建人这个类
class Person { private int age; //把年龄私有 public void setAge(int a) // 但对外提供访问的方式,可以加入逻辑性语句,对访问的数据进行操作,极高代码的健壮性 { if(a>0 && a<100) { age=a; speak(); } else System.out.println("feifa age"); } void speak(){ System.out.println("age="+age); } } class PersonDemo { public static void main(String[] args) { Person p=new Person(); p.setAge(-89); } }
一个成员变量有两个访问方式:设置和获取。
构造函数:
特点:函数名与类名相同、不用定义返回值类型、不可以写return语句。
作用:给对象进行初始化。
注意:默认构造函数的特点、多个构造函数是以重载的形式存在的
例如:
class Person { private String name; private int age; //构造函数 Person() { System.out.println("A: name="+name+" age="+age ); } Person(String n) { name=n; System.out.println("B: name="+name+" age="+age ); } }
构造代码块:
作用:给对象进行初始化,对象已建立就运行,而且优先于构造函数执行
区别:构造代码块是给所有对象进行统一的初始化,而构造函数是给对应的对象
初始化。构造代码块中定义的是不同对象共性的初始化内容。
例如
class{ { cry(); xiao(); System.out.println("aaaaaaaaaaaa");//构造代码块 初始化对象的值 优先执行 并且每一个构造函数都执行一遍 } }
this 的应用:
用于区*部变量和成员变量同名的情况,this代表它所在方法所属对象的引用。当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象,但凡本类功能内部使用了本类对象,都用this表示。
例如
1.
Person(int age) { this.age=age; System.out.println("D: name="+name+" age="+age ); }
2.比较两个数是否相同
class PersongouDemo { public boolean compare(Person p) { return this.age==p.age; } public static void main(String[] args) { Person p1=new Person(23); Person p2=new Person(26); boolean b=p1.compare(p2); System.out.println(b); } }
应用:用于构造函数之间进行调用,this语句只能定义在构造函数的第一行,
因为初始化要先执行。
例如:
class Person{ String name; int age; Person(String name){ this.name=name; } Person(String name,int age){ this.name=name; this.age=age; } }