黑马程序员------面向对象(一)
1.1 面向对象概念
1.1.1 面向对象概念
面向对象是相对面向过程而言,强调的是功能的对象。面向对象和面向过程都是一种思想。
举例理解面向对象:如请人修车,我只面向修车的人,不面对修车的过程。只看中修好车的结果。
面向对象的本质:以类的方式组织代码,以对象的方式组织数据。
1.1.2 面向对象的特点
是一种符合人们思考习惯的思想,可以将复杂的事情简单化,将程序员从执行者转换成了指挥者。
1.1.3 面向面向对象的特征:
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
以后开发,其实就是找对象,没有对象,自己创建一个
1.2 类与对象之间的关系
1.2.1类和对象的关系
现实生活中的对象:张三 李四。
想要描述:提取对象中共性内容。对具体的抽象。
描述时:这些对象的共性有:姓名,年龄,性别,学习java功能。
映射到java中,描述就是class定义的类。
具体对象就是对应java在堆内存中用new建立实体,属性对应是类中变量,行为对应的类中的函数(方法)。
类就是:对现实生活中事物的描述。定义类,其实就是在描述事物,就是在定义属性和行为。
对象:就是这类事物,实实在在存在个体。
1.2.2成员变量和局部变量的区别
成员变量和局部变量。
作用范围。
成员变量作用于整个类中。
局部变量变量作用于函数中,或者语句中。
在内存中的位置:
成员变量:在堆内存中,因为对象的存在,才在内存中存在。
局部变量:存在栈内存中。
1.2.3示例:创建对象,使用对象
需求:描述汽车(颜色,轮胎数)。描述事物其实就是在描述事物的属性和行为
//对Car这类事物进行描述
class Car
{
String color = "red";//描述颜色
int num = 4;//描述轮胎数
void run()
{
System.out.println("color = " +color +"...num = " +num);//输出汽车的值
}
}
class CarDemo
{
public static void main(String[] args)
{
Car c = new Car();//通过new关键字,建立对象,c就是一个类类型的引用变量,指向了该类的对象
c. color = "blue" ;//对对象的属性进行修改
c.run() ;//通过对象.成员的形式来调用对象的run方法
}
}
1.3 封装
1.3.1封装:
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:1. 将变化隔离。
2. 便于使用。
3. 提高重用性。
4. 提高安全性。
封装原则:1. 将不需要对外提供的内容都隐藏起来。
2. 把属性都隐藏,提供公共方法对其访问。
1.3.2对象属性的私有
1. private :私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)。
2.被私有化的成员只在本类中有效。
3.注意:私有仅仅是封装的一种表现形式
之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断等语句。
对访问的数据进行操作。提高代码健壮性
1.3.3示例:
/*
人:属性:年龄
行为:说话
本例将age私有化以后,类以外即使建立了对象也不能直接访问。
但是人应该有年龄,就需要在Person类中提供对应访问age的方式。
之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断等语句。
对访问的数据进行操作。提高代码健壮性。
*/
class Person
{
private int age ;//通过private私有化age,把属性进行隐藏,让别人不能直接访问赋值,
public void setAge( int a) //通过set、get方法对外提供公共方法对其访问
{
if (a > 0 && a < 130)
{
age = a;
}
else
System.out .println("feifa age" );
}
public int getAge()//取得年龄信息
{
return age ;
}
void speak(){
System.out .println("age = " + age);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person();//创建并实例化对象
p.setAge(20);
p.speak();
//如果赋值不合法,则set方法不允许成功赋值
// p.setAge(-40);
}
}
END