面向对象编程:
内容:
1. 编程语言的发展
2. 面向过程的设计思想
3. 面向对象的设计思想
4. 对象和类的概念
5. 类之间的关系
6. 对象和引用
7. JAVA类的定义
8. 对象的创建和使用
9. This关键字
10. Static关键字
11. Package和import语句
12. 访问控制
13. 类的继承
14. 方法的重写
15. Final重写
16. Object类
17. 对象转型
18. 多态
19. 抽象类
20. 接口
面向过程的设计思想和面向对象的设计思想
最合适的方法出现在最合适的类中……
类(对象)之间的关系 之 关联关系
一个类的方法里面是另外一个的方法中的一个对象
继承关系(一般和特殊)
什么是一种什么
聚合关系(整体和部分)
实现关系
面向对象思维的方法:
1、 有哪些类哪些对象
2、 这个类这些对象应该有的属性和方法
3、 类和类之间的关系
Java与面向对象
对象是JAVA程序的核心,在JAVA程序中“万事万物皆对象”。
对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体。
类是用来创建同一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法
J2SDK提供了很多类提供编程人员使用,编程人员也可以定义自己的类
为什么用对象?
面向对象的编程------ 一组对象相互配合通过沟通完成特定功能
所以的paradigm都是对现实问题的抽象
汇编是对机器语言的抽象
面向过程的语言是对汇编的抽象
对象是更加符合对于现实问题的抽象
对象都是对外服务的接口
通过继承可以复用
对象隐藏内部服务的实现
通过聚合可以复合
面向对象更加容易是我们达到这些年来苦苦追求的境界
Reusable、Extensibilty、维护和替换更加方便
组件---比对象更高的层次上的抽象(二进制级别)
EJB、Web Service、CORBA、COM……
JAVA类的定义
类的定义主要有两方面组成一成员变量和方法
成员变量
成员变量可以使JAVA语言中任何一种数据类型(包括基本类型和引用类型)
在定义成员变量时可以对其初始化,如果不对初始化,JAVA使用默认的之对其初始化
成员变量的作用范围为整体类体。
JAVA面向对象基本概念 引用
Java语言中除基本数据类型之外的变量类型称之为引用类型
Java中的对象通过引用对其操作
如何在内存中区分类和对象
类是静态的概念,代码区
对象是new出来的,位于堆内存,类的每个成员变量在不同的对象中都是不同的值(除了静态变量) 而方法只有一分,执行的时候才占用内存
对象的创建和使用
必须使用new关键字创建对象
使用对象(引用).成员变量或来引用成员变量的成员变量
(注意“.”)
使用对象(引用).方法(参数列表)来调用对象的方法
(注意“.”)
同一个类的每个对象有不同的成员变量存储空间
同一个类的每个对象共享该类的方法
构造方法(构造函数)
使用new+构造方法 创建一个新的对象
构造函数定义是JAVA类中的一个用来初始化对象的函数
构造函数与类同名且没有返回值
创建对象时,使用构造函数初始化对象的成员变量
当没有指定构造函数时,编译器为类自动添加型如 类名(){ }的构造函数
约定俗成的方法:
类名的首字母大写
变量名和方法名的首字母小写
运用驼峰标示
内存的解析:
方法的重载
方法的重载是指一个类中可以定义有相同的名字,但是参数不同的多个方法,调用时,会根据不同的参数表选择对应的方法
参数个数不一样或参数类型不一样;
对象的创建和使用
必须使用new关键字创建
使用对象引用。成员变量或来引用对象的成员变量
使用对象引用。方法(参数类别)来调用对象的方法
同一类的每个对象有不同的成员变量存储空间
同一类的的每个对象共享该类的方法
非静态方法是针对每个对象进行调用
下面代码的执行过程:要清晰点
class Point {
private double x;
private double y;
Point(double x1, double y1) {
x = x1;
y = y1;
}
public double getX() { return x; }
public double getY() { return y; }
public void setX(double i) { x = i; }
public void setY(double i) { y = i; }
}
class Circle {
private Point o;
private double radius;
Circle(Point p, double r) {
o = p;
radius = r;
}
Circle(double r) {
o = new Point(0.0, 0.0);
radius = r;
}
boolean contains(Point p) {
double x = p.getX() - o.getX();
double y = p.getY() - o.getY();
if(x*x + y*y > radius * radius) return false;
else return true;
}
public void setO(double x, double y) {
o.setX(x);
o.setY(y);
}
public Point getO() { return o; }
public double getRadius() { return radius;}
public void setRadius(double r) { radius = r;}
public double area() {
return 3.14 * radius * radius;
}
}
public class TestCircle {
public static void main(String args[]) {
Circle c1 = new Circle(new Point(1.0,2.0), 2.0);
Circle c2 = new Circle(5.0);
System.out.println("c1:("+c1.getO().getX()+","
+c1.getO().getY()+"),"+c1.getRadius());
System.out.println("c2:("+c2.getO().getX()
+","+c2.getO().getY()+"),"+c2.getRadius());
System.out.println("c1 area = "+c1.area());
System.out.println("c1 area = "+c2.area());
c1.setO(5,6);
c2.setRadius(9.0);
System.out.println("c1:("+c1.getO().getX()+","
+c1.getO().getY()+"),"+c1.getRadius());
System.out.println("c2:("+c2.getO().getX()+","
+c2.getO().getY()+"),"+c2.getRadius());
System.out.println("c1 area = "+c1.area());
System.out.println("c1 area = "+c2.area());
Point p1 = new Point(5.2, 6.3);
System.out.println(c1.contains(p1));
System.out.println(c1.contains(new Point(10.0,9.0)));
}
}
先确定方法的名字