方法的重载(overload)
重载:一个类中可以定义多个名称相同,但参数列表不同的方法;
构成方法重载的条件:
- 不同的含义:形参类型、形参个数、形参顺序不同;
- 只有返回值不同不构成方法的重载;
如:int a(Sting str){} 与 void a(String str){} 不构成方法重载 - 只有形参的名称不同,不构成方法的重载;
如:int a(String str){} 与 int a(String s){}不构成方法重载
public class TestOverload {
public static void main(String[] args) {
// add() add(12) 形参不同可以被重载
add();
add(12);
// 形参数量不同可以被重载
add();
add(1);
add(1, 2);
// 形参类型不同可以重载
add(1);
add(3.2);
// 形参顺序不同可以重载
add(1, 'a');
add('a', 1);
// add(1000); // 如果放开形成是b的方法就报错,形参不同,不能被重载
}
// 正确重载
static void add() {}
static void add (int a){}
static void add (int a, double b){}
static void add (double a){}
static void add (int a, char b){}
static void add (char a, int b){}
// 错误重载
// static void add(int b){}
// 返回值不同,也是不能被重载
// static int add(int a, int b){};
// static void add(int a, int b){};
}
面向对象编程
已制造汽车为例。为了协作,我们找轮胎厂完成制造轮胎的步骤,发动机厂完成制造发动机的步骤;这样,发现大家可以同时进行车的制造,最终进行组装,大大提升效率。但是,具体到轮胎厂的一个流水线操作,仍然是有步骤的,还是离不开执行者、离不开面向过程思维;
因此,面向对象可以帮助我们从宏观上把握、从整体上分析整个系统。但是,具体实现部分的微观操作(就是一个个方法),仍然需要面向过程的思维去处理。
千万不要把面向过程和面向对象独立起来。两者是相辅相成。面型对象离不开面向过程。
- 面向对象和面向过程的思想总结:
- 都是解决问题的思维方式,都是代码组织的方式。
- 面向过程是一种"执行者思维",解决简单问题可以使用面向过程
- 面向对象是一种"设计者思维",解决复杂、需要协作的问题可以使用面向对象
- 面向对象离不开面向过程
- 宏观上:通过面向对象进行整体设计
- 微观上:通过面向过程进行执行和数据处理
面向对象是一种 “设计思维”。设计时,先从问题中找名词。然后确定这些名词哪些可以作为类,再根据问题需求确定的类的属性和方法,确定类之间的关系。
设计一款企业软件,我们需要进行面向对象分析。写一首诗、一篇文章、一篇小说也需要进行面向对象分析。
类可以看做也是一个模板,或者图纸,系统根据类的定义来造出对象。我们要造一个汽车,怎么造?类就是这个图纸,规定了汽车的详细信息,然后根据图纸将汽车造出来。
类:叫class。
对象:是Object.instance(实例)。以后我们收的某个类的对象,某个类的实例。是一样的意思。
// 每一个源文件必须有且只有一个public class, 并且类名和文件名保持一致!
public class Car{
}
class Type { // 一个java文件可以同时定义多个class
}
class Engine {
}
class Seat {
}
对于一个类来说,有三种成员:属性fied、方法method、构造器constructor。
属性(field 成员变量)
属性用于定义该类或者该类包含的数据或者说静态特征。属性作用范围是整个类体。在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。
数据类型 | 默认值 | 说明 |
---|---|---|
整型 | 0 | int类型 |
双精度浮点型 | 0.0d | double类型 |
字符型 | ‘\u0000’ | char类型 |
布尔型 | false | boolean类型 |
引用类型 | null | 类、接口、数组等 |
属性定义格式
[修饰符] 属性类型 属性名 = [默认值]
方法
方法用于定义该类或者该类示例的行为特征和功能实现。方法是类和对象行为特征的抽象。面向对象中,整个程序的基本单位是类,方法是从属类和对象的。
[修饰符] 方法返回值类型 方法名(形参列表){
// n 条语句
}
public class SstStu {
int id;
int age;
String sname;
public void study(){
System.out.println("正在学习,不好打扰");
}
public void kickBall () {
System.out.println("正在踢球,正在挥汗!");
}
public static void main(String[] args) {
SstStu sst = new SstStu();
System.out.println(sst.id);
System.out.println(sst.sname);
sst.id = 1001;
sst.sname = "ckk";
System.out.println(sst.id);
System.out.println(sst.sname);
sst.kickBall();
sst.study();
}
}