1. 面向对象与面向过程
- 面向对象:将问题中所有的对象找出来,再确定对象与对象之间的关系
- 面向过程:以过程为中心,将问题的解决步骤依次列出来,按过程依次解决问题
2.类与对象的关系
- 类 (Class)是用于描述一类事物的属性(特征)和行为(方法)。它定义了对象应该具有哪些数据成员(字段)和成员函数(方法)。
- 对象 (Object)是类的一个实例。它是根据类定义创建的具体实体。每个对象都有自己的状态和行为。
类和对象的关系
- 模板与实例:类是对象的模板,对象是类的引用。
- 数据与行为:类定义了对象的数据结构(即对象的状态)和可以执行的操作(即对象的行为)。
- 创建过程:当根据类创建一个对象时,实际上是分配了一段内存空间,并初始化了类定义的属性值。
- 多态性:不同的对象可以对同一消息做出不同的响应。这意味着同一个方法可以在不同的对象上表现出不同的行为。
- 类是用来描述一类事物共性的抽象概念,而对象则是这一类事物的具体实例。通过类创建对象的过程称为实例化。
3.面向对象思想开发步骤
找对象 ==》定义类 ==》创建对象 ==》通过对象调用相关行为,完成对应需求
4.类的定义
[public] class 类名 {
//属性
//方法
}
5.创建对象
类名称 对象名 = new 类名称();
6.属性
类的属性 也称之为全局变量
[修饰符] 数据类型 属性名 [= 值];
用法:
1.取值
数据类型 变量名 = 对象.属性名;
2.赋值
对象.属性名 = 值;
7.方法的定义及调用
方法代表一种行为 / 功能 ,当被调用时才会被执行
[修饰符] 返回值类型 方法名(参数列表){
//具体做的事情---方法体;
[return 返回值]
}
高内聚——类的内部,越紧密越好,低耦合——类与类之间没关系才好
- 在方法中,使用return关键字来返回方法执行的结果
- 定义方法的时候,如果方法有返回值,那么在方法体结束后,一会会有return,return后面的返回值的类型要与你定义方法的返回值类型保持一致
- 如果这个方法没有返回值,我们就可以将返回值类型写成void ,return 可以省略了
- 在return的下一行不可以有任何代码
8.形参与实参
- 形式参数 :我们在定义方法的时候使用的参数--本身没有任何实际的意义
- 实际参数 :当我们在调用这个方法的时候传递参数,这个实际参数会传到我们定义方法的参数位置上。实际参数就是给形式参数做赋值的。
- 实际参数----传递值的方式
- by value :按值传递(基本数据类型传值方式)
- by ref :按引用传递
9.方法重载
在同一个类中方法名相同,参数列表不同的一组方法被称之为方法的重载
10.构造器
- 构造器也称构造方法、构造函数——为对象的属性值作初始化操作(赋值)
- 每个类都有构造方法,方法名与类名相同,如果未人为定义构造方法,JVM会自动定义无参的构造方法
- Alt + Insert IDEA快速生成 构造方法,getter,setter……
11.this关键字
this代表当前对象(谁调用代表谁)
//1.形参名==实参名
this.age =age;
//2.调用方法,几乎不用
this.test02();
test02(); //推荐
//3.this.(); 调用已经存在的构造方法,简化当前的构造方法。
// this() 须写在当前构造方法的第一行
public class Demo {
String name;
int age;
public Demo() {
this.name = name;
}
public Demo(String name, int age) {
this();
this.age = age;
}
}
12.匿名块
没有方法名的代码块,在构造方法调用前执行
面向对象小结
Person person1 = new Person(6);
//1.在栈内开辟栈帧,--this产生
//2.调用构造方法,完成属性值的初始化操作
//3.将对象的引用返回person1
13.包管理
import com.oracle.A;//在一个类中使用另外一个包中的类
public class B {
A a;
}
14.继承
通过现有的类,简化子类的创建(子类就也可以拥有父类的属性和方法)
继承关系:子类(衍生类、派生类) extends 父类
Java中不支持多继承,但可传递继承,一个父类可以有多个子类,一个子类仅有一个父类
所有类会自动继承Object类
15.方法的重写(Override)
在父子类中(至少两个类),子类覆盖父类的方法,要求返回值类型、方法名、参数列表必须与父类保持一致
// 重写object类的toString方法
@Override
public String toString(){
return "Student{"+ "name:"+name+",age:"+age+"}";
}
父类具有的属性和方法,子类可以通过继承拥有,或者通过重写实现选择性继承(同种事务的不同实现方式),子类也可 extends 父类没有的属性和方法
16.super关键字
super关键字可以访问父类的成员变量、方法
super.name; super.getname(); super(); //在子类的构造方法中调用父类的构造方法。 此时super关键字出现在构造方法第一位置!!!
子类不可以继承父类的构造方法,但子类的构造方法会先调用父类的构造方法。
this() 和 super()不可以同时出现在同一个构造方法中
17.多态
多态是同一个行为具有多种不同表现形式或形态的能力
多态就是同一个接口,使用不同的实例而执行不同操作
- 多态的优点:
- 消除类型之间的耦合关系
- 可替换性
- 可扩充性
- 接口性
- 灵活性
- 简化性
- 多态存在的三个必要条件:
继承、重写、父类引用指向子类对象:Parent p = new Child();
- 多态的实现方式:
- 重写:
- 接口:
生活中的接口最具代表性的就是插座,例如一个三接头的插头都能接在三孔插座中,因为这个是每个国家都有各自规定的接口规则,有可能到国外就不行,那是因为国外自己定义的接口类型。
- 抽象类和抽象方法:
18.Java抽象类
如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类不能被实例化,如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
19.封装
封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。防止该类的代码和数据被外部类定义的代码随机访问。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
- 封装的优点:……