一、面向对象和面向过程的总结
1、都是解决问题的思维方式,都是代码组织的方式。
2、解决简单问题可以使用面向过程
3、解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程。
面向对象思考方式
遇到复杂问题,先从问题中找名词,然后确立这些名词哪些可以作为类,再根据问题需求确定的类的属性和方法,确定类之间的关系。
面向对象
1.面向对象具有三大特征:封装性、继承性和多态性,而面向过程没有继承性和多态性,并且面向过程的封装只是封装功能,而面向对象可以封装数据和功能。所以面向对象优势更明显。
2.一个经典的比喻:面向对象是盖浇饭、面向过程是蛋炒饭。盖浇饭的好处就是“菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低。
对象
1.对象说白了也是一种数据结构(对数据的管理模式),将数据和数据的行为放到了一起。
2.在内存上,对象就是一个内存块,存放了相关的数据集合!
3.对象的本质就一种数据的组织方式!
总结
1.对象是具体的事物;类是对对象的抽象;
2.类可以看成一类对象的模板,对象可以看成该类的一个具体实例。
3.类是用于描述同一类型的对象的一个抽象概念,类中定义了这一类对象所应具有的共同的属性、方法。
对于一个类来说,一般有三种常见的成员:属性field、方法method、构造器constructor。这三种成员都可以定义零个或多个。
1、第一个类的定义
类的三种常见的成员:属性field、方法method、构造器constructor。这三种成员都可以定义零个或多个。
public class Stu {
//成员属性 field
String name;
int age;
int id;
public static void main(String[] args) {
Stu stu=new Stu();
stu.name="张三";
stu.age=18;
stu.id=1;
System.out.println("大家好!我叫:"+stu.name+"\t"+"今年:"
+stu.age+"岁"+"\n"+"学号 :"+stu.id);
}
//构造函数
Stu(){
}
}
2、属性
属性定义格式:
[修饰符] 属性类型 属性名 = [默认值] ;
属性用于定义该类或该类对象包含的数据或者说静态特征。属性作用范围是整个类体。
在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。
3、语句块
语句块(有时叫做复合语句),是用花括号扩起的任意数量的简单Java语句。块确定了局部变量的作用域。块中的程序代码,作为一个整体,是要被一起执行的。块可以被嵌套在另一个块中,但是不能在两个嵌套的块内声明同名的变量。语句块可以使用外部的变量,而外部不能使用语句块中定义的变量,因为语句块中定义的变量作用域只限于语句块。
public static void main(String[] args) {
int a;
int b;
{
//int a;//编译错误,不能重复定义变量a
int k;
}
//k=10;//变量k的作用域到此为止
}
4、方法
方法用于定义该类或该类实例的行为特征和功能实现。方法是类和对象行为特征的抽象。方法很类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。可以理解为是一系列语句的集合,但必须存在于类中。方法的命名也要标识符的名称规则。
方法定义格式:
[修饰符] 返回值类型 方法名 (参数类型 参数名){
...
方法体
...
return 返回值;
}
修饰符:可选,定义了方法的可见度,public,private,protected。
返回值类型:必须,方法返回值的数据类型。
方法名:必须,方法的名称,调用者通过这个名称进行调用。
参数类型:可选,参数的数据类型,调用者必须传入该数据类型的值。方法可不包含参数。
方法体:可选,但一般不为空,是该方法逻辑的实现,定义了该方法的功能。
优点
- 使程序变得更简短而清晰。
- 有利于程序维护。
- 可以提高程序开发的效率。
- 提高了代码的重用性。
构造方法
// 一个简单的构造函数
class MyClass {
int x;
// 以下是构造函数
MyClass() {
x = 10;
}
}
一个典型类的定义
public class StudentCp {
//field 成员属性
int id;
String naem;
int age;
Computer comp;
public static void main(String[] args) {
StudentCp stu1=new StudentCp();
stu1.naem="张三";
Computer comp1=new Computer();
stu1.comp=comp1;
stu1.study();
}
void study() {
System.out.println("我正在学习 使用我的电脑,"+comp.drand);
}
public StudentCp() {
System.out.println("构造方法");
}
}
class Computer{
String drand="戴尔";//品牌
}
4、方法重载(Overload)
// 方法一
public void accept(String param) {
// 方法实现
}
// 方法二
public void accept(int param) {
// 方法实现
}
方法一和方法二已经构成重载
构成重载必须满足的条件
1.函数名/方法名相同
2.参数个数不同或者参数类型不同
3.函数重载和返回值类型无关