java面向对象
1.什么是面向对象
一个很抽象的概念,它相对面向过程而言。
过程与对象都是一种解决问题的思想。
面向过程:强调的是功能行为,一种过程,先干啥,再干啥;
面向对象:将功能封装到对象里,强调的是具备某功能的对象;
计算机语言为了更好的去描述现实生活中的事物,也一样会按照生活中的思考方式来定义,这样人们使用起来才会更方便。
面向对象的三个特征:
封装(Encapsulation);
继承(Inheritance);
多态(Polymorphism)。
2.类和对象的关系
类是对生活中某一类事物的描述(一种抽象概念),对象是该类事物实实在在存在的个体。(对象==实例)
3.类的定义
[访问权限][修饰符] class 类名{
1~n个构造方法;
0~n个字段;
0~n个方法
}
构造方法:用来构造类的实例(默认有一个无参的构造方法,得使用new调用)
字段:类或对象所包含的数据,对类状态的一种描述;
方法:类或对象的特征或行为
class CellPhone{
String brand = "google";
String color = "red";
double price;
public void showInfo()
{
System.out.println(
brand+ "手机是"+color+"色的"+"价值"+price);
}
}
4.static关键字
特点:
- 随着类的加载而加载
- 优先于对象存在
- 被所有对象所共享
- 可以直接被类名调用
使用注意: - 静态方法只能访问静态成员
- 但是非静态成员可以访问静态成员;
- 静态方法中不可以使用this,super关键字
可修饰字段,方法。
用static 修饰的成员表示它属于这个类共有,而不是属于该类的单个实例。
static 修饰的字段 == 类字段
static 修饰的方法 == 类方法
没使用static修饰的字段和方法,成员属于类的单个实例,
不属于类。
没有static 修饰的字段 == 实例字段
没有static 修饰的方法 == 实例方法
类和实例访问字段和方法的语法:
访问类成员: 类.字段 类.方法
访问实例成员: 实例.字段 实例.方法
static 修饰的字段和方法,既可以通过类调用,也可以使用实例调用;
没static 修饰的字段和方法,只能使用实例来调用
5.匿名对象
特点:
对方法或字段只进行一次调用时;
- new Car().show();
- new Car().run();
可作为实际参数进行传递; - public void show(Car c)
- new Car().show(new Car());
只在堆内存中开辟空间,而没有在栈内存的引用。
6.面向对象 之 封装
- 封装的两个含义:
- 把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中(类);
- "信息隐藏", 把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,字段;
- 封装机制在程序中的体现是:把描述对象的状态用字段表示,描述对象的行为用方法表示,把字段和方法定义在一个类中,并保证外界不能任意更改其内部的字段值,也不允许任意调动其内部的功能方法。
- 程序中的一种体现:通常将类中的成员变量私有化(private),通过对外提供方法(setXxx,getXxx),可对该变量(xxx)进行访问。
- boolean 类型的变量没有getXX,只有 isXX;
this关键字
- 特点:this表示当前对象。
当前对象 ←→ 当前正在调用实例成员的对象
换言之:谁调用了方法,谁就是当前对象。 - 什么时候使用this关键字呢?
方法间的相互调用;
this.字段; - 构造器中相互调用,但是此时this([参数])必须写在构造方法第一行。
- this不能用在static修饰的方法里和static修饰的代码块里;
7.访问修饰符
- private 类访问权限:本类内部可以访问,不能继承到子类;
- default 什么都不写,包访问权限:本类内部可以访问,同包其他类也可以访问,同包可继承;
- protected 子类访问权限:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问,能继承到子类;
- public 公共访问权限:任何地方都可以访问,能继承到子类;
8.构造方法
-
特点:
方法名与类名相同
不用定义返回值类型
不需要写return语句 -
作用:
给类中的字段进行初始化,可以用来创建对象。
注意: -
默认构造方法的特点。
多个构造方法是以重载的形式存在的。 -
对象的产生格式:
类名称 对象名 = new 类名称();
因为有(),所以是方法,实际上它就是构造方法,并且是非私有的构造方法。
如:CellPhone cp = new CellPhone();
9.类的设计分析
- 根据要求写出类所包含的字段;
- 所有的字段都必须私有化;
- 封装之后的字段可通过setter和getter设值和取得;
- 按需求可添加若干构造方法;
- 根据需求可添加相应的方法;
- 类中的所有方法都不要直接处理(输出打印),而是交给调用者去处理。