程序的发展经历了两个主要阶段:面向过程、面向对象。面向对象是当前软件开发的主流。
面向过程就是分析出解决所需要的步骤,然后用函数将这些步骤一步一步实现,使用的时候一个一个一次调用。
面向对象是把构成问题的事务分解成各个对象。建立对象的目的不是为了完成一个步骤而是为了描述某个事物在整个解决问题步骤中的行为。
面向对象是为了专注在程序中采用封装、继承、多态等设计方法。面向对象的设计是一种提供符号设计系统的面向对象的实现过程,它用非常接近实际领域术语的方法吧系统构造成“现实世界”的对象。
面向对象具有三大特性:封装性、继承性、多态性。
封装:对外部不可见。封装机制通过将描述对象属性的变量和实现对象功能的方法结合在一起,来保证外界不可以随意更改其内部的属性值和任意调用其功能方法。
继承:扩展了类的功能。继承机制大大增强了程序代码的可复用性,提高了软件开发的效率,降低了程序产生错误的可能性,同时为修改程序带来了便利。
多态:包括方法的重载,对象的多态性。多态允许程序中出现重名现象,使得程序的抽象度和简介度更高,有助于开发人员分组协同开发工作的顺利进行。
类与对象的设计
类(class):是对某一类事物的描述、是抽象的、概念上的定义。
对象(object):是实际存在的该类事物的每个个体,因而也称为实例(instance).
类是由属性和方法组成的。
在一个Java源文件中可以创建多个类,但主类只能有一个,主类用public来标识的,主类里一定包含main()方法,并且主类的名称必须与Java源文件的文件名保持完全一致。
在一个类中可以创建多个对象。
(1)类的定义和创建。类的定义格式如下所示:
Class 类名称 { //定义类的名称 数据类型 属性1; //定义类中的属性,格式 “ 访问权限 属性数据类型 属性名称 ;” ...... 数据类型 属性n;
//定义类中的方法,格式 “ 访问权限 方法返回值数据类型 方法名称( )” public 返回值的数据类型 方法名称(参数1,参数2,...,参数n) { 程序语句; [return 表达式;] } }
(2)对象的创建和使用。对象的创建格式一:
类名 对象名称 = null; //声明对象 对象名称 = new 类名(); //实例化对象
对象的创建格式二:
类名 对象名称 = new 类名(); 例如: Person per = new Person(); //创建Person类的对象per并实例化。
(3)访问对象中的属性或方法
调用动态的方法用对象,调用静态方法用类名,在本类当中,这个类名可以省略。
访问对象中的属性或方法格式如下:
访问属性: 对象名称.属性名 访问方法: 对象名称.方法名()
例如:
per.name = '张三'; //为Person类的per对象的name属性赋值
per.age = 12; //为Person类的per对象的age属性赋值
pre.print(); //调用Person类的per对象的print()方法
(4)匿名对象。匿名对象就是没有明确给出名称的对象,一般只使用一次。例如
new Person().print(); //匿名对象调用Person类的print()方法
什么时候用匿名对象:
需要多次使用的用命名对象,如果用匿名对象,每次new都是在创建一个新的对象。
StaticDemo[] obj=int StaticDemo[10];
obj[0]=new StaticDemo(); //匿名对象的使用。
自定义类的三步骤:
1.自定义类
class Car{ //事物的公共属性使用成员变量描述。 String name;//名字的属性 String color;//颜色的属性 int wheel;//轮子数 public void run(){ System.out.println("这辆车跑的飞快...") } }
2.通过类创建对象
public static void main(String[] args) { Car c = new Car();//new Car类的构造方法就是创建一个Car类的对象 //新建一个变量c,它指向Car的对象。指定他的类型是Car类 }
3.访问对象的属性或访问对象的功能
1.访问对象的属性的格式
对象.属性名
2.设置对象的属性的格式
对象.属性名= 数据
public static void main(String[] args) { Car c = new Car();//new Car类的构造方法就是创建一个Car类的对象 //新建一个变量c,它指向Car的对象。指定他的类型是Car类
//设置车的属性 c.name="BMW"; c.color="black"; c.wheel=4;
//返回车对象的属性值
System.out.println("车的名字:"+c.name+"车的颜色:"+c.color+"车的轮子:"+c.wheel);
}
构造方法
构造方法是定义在Java类中的一个用来初始化对象的方法。构造方法与类同名且没有返回值。每个类中肯定会有一个构造方法。如果一个类中美有声明一个明确的构造方法,则系统会自动生成一个无参数的什么都不做的构造方法。如果一个类中已经明确地声明了一个构造方法,则程序编译时将不再自动生成默认的构造方法。
(1)构造方法的定义格式:
class 类名称 { 访问名称 类名称(类型1 参数1,类型2 参数2,...) { 程序语句; ....... //注意构造方法没有返回值,与类同名且没有返回值 } }
以Person类为例,如果没有明确的构造方法,则系统会自动生成如下所示的构造方法。
class Person{ public Person(){ } }
(3)构造方法的作用和重载。构造方法的主要目的是初始化类中的属性。
构造方法的重载过程与普通方法一样,也是方法中参数的类型或参数个数不同。
方法的覆盖
Java语言中子类继承父类后,子类可以重写父类的方法。Java语言的方法分为静态方法和非静态方法,非静态方法可以被覆盖,而静态方法则不可以。
方法的重载与方法的覆盖的区别:
(1)方法的重载需在同一个类中实现,方法的重载就是方法名称相同,但参数的类型或参数的个数不同。
(2)方法的覆盖需要在父类与子类两个类中实现,方法的覆盖就是方法的名称、参数个数和类型、返回值类型完全相同,子类方法覆盖了父类的方法。