------- android培训、java培训、期待与您交流! ----------
面相对象
1.理解:面相对象是基于面相过程的,是一种思想,是将功能封装进对象,强调具备了功能的对象。
特点:可以将复杂的事情简单化;完成需求时,先要找到具有所需功能的对象,如果对象不存在,那么创建一个就有所需功能的对象,这样就简化开发提高复用。
开发过程:其实就是不断的创建对象,使用对象,指挥对象做事情。
设计过程:其实就是在管理和维护对象之间的关系。
面相对象的特征:封装(encapsulation)继承(inheritance)多态(polymorphism)
示例:
人开门:名词提炼法。
人
{
开门(门)
{
门.开();
}
}
门
{
开(){操作门轴等}
}
2.类与对象的关系
使用计算机语言就是不断的描述现实生活中的事物;事物通过类的形式体现,类是具体事物的抽象,概念上的定义。对象即是该类事物实实在在存在的个体。
类的定义:生活中描述事物无非就是描述事物的属性和行为。
在Java中用类class描述事物,属性:对应类的成员变量。行为:对应类中的成员函数。
定义类其实在定义类中的成员(成员变量和成员函数)
3.成员变量和局部变量的区别
成员变量:定义在类中,在整个类中都可以被访问;
随着对象的建立而建立,存在于对象所在的堆内存中;
有默认初始化值。
局部变量:只定义在局部范围内,如:函数内,语句内等;
存在于栈内存中;
作用的范围结束,变量空间会自动释放;
没有默认初始化值。
基本数据类型参数传递:
classDemo
{
public static void main(String[] args)
{
int x = 4;//没有在堆内存中开辟空间
show(x);
System.out.println(x);
}
public static void show(int x)
{
x = 2;//存在于栈内存中,没有对应的对象,变量空间会自动释放。
}
}
引用数据类型传递
classDemo
{
int x = 3;
public static void main(String[] args)
{
Demo d = new Demo();
d.x = 10;
show(d);//show(new Demo());在堆内存中产生一个新的对象
System.out.println(d.x);
}
public static void show(Demo d)
{
d.x = 6;//给堆内存的对象赋值,并释放空间。
}
}
数组类型参数传递
classDemo
{
public static void main(String[] args)
{
int[] arr = new int[2];//一维数组在堆内存中包含两个元素a[0],a[1];
show(arr);
System.out.println(arr[0]);
}
public static void show(int[] arr)
{
arr[0]++;//给堆内存a[0]赋值,并释放空间。
}
}
4.匿名对象
匿名对象使用方式一:当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化。如果对一个对象进行多个成员调用,必须给这个对象起个名字。
匿名对象使用方式二:可以将匿名对象作为实际参数进行传递。
示例:汽车修配厂。对汽车进行改装,将来的车改成黑车,三个轮胎。
class CarDemo
{
public static void main(String[] args)
{
//生产汽车。在java中通过new操作符来完成。其实就是在堆内存产生一个实体。
Car c = new Car();//c就是一个类类型变量。记住:类类型变量指向对象。
show(c);//show(new Car());
}
public static void show(Car c)
{
c.num = 3;
c.color = "black";
c.run();
}
}
class Car
{
String color = "红色";
int num = 4;
void run()
{
System.out.println(color+".."+num+"开跑了!");
}
}
5.面相对象设计思想
需求:球从一根绳子的一端移动到了另一端
classRope
{
private Point start;
private Point end;
public Rope(Point start,Point end)
{
this.start=start;
this.end = end;
}
public Point nextPoint(PointcurrentPoint)
{
/*
通过两点一线的数学公式可以计算出当前点的下一个点,这个细节不属于设计阶段要考虑的问题,如果当前点是终点,则返回null,如果当前点不是线上的点,则抛出异常。
*/
return null;
}
}
classBall
{
private Rope rope;
private Point currentPoint;
public Ball(Rope rope,Point startPoint){
this.rope = rope;
this.currentPoint = startPoint;
}
public void move()
{
currentPoint =rope.nextPoint(currentPoint);
System.out.println("小球移动到了"+currentPoint);
}
}
------- android培训、java培训、期待与您交流! ----------