一、面向对象的基本概念
面向过程:是一种以过程为中心的编程思想。“面向过程”就是汽车启动是一个事件,汽车到站是另一个事件。在编程序的时候我们关心的是某一个事件。而不是汽车本身。我们分别对启动和到站编写程序。
面向对象:是一种以事物为中心的编程思想。我们关心的是由汽车抽象成的对象,这个对象有自己的属性,像轮胎,颜色等;有自己的方法,像启动,行驶等.方法也就是汽车的行为.而不是汽车的每个事件。
面向对象的三大特性:
- 封装
- 继承
- 多态
对象:是用来描述客观事物的一个实体。例如奥迪车和宝马车,虽然这两个跑车都是对象,但具有不同的特征,比如品牌不同、价格不同、性能不同
类:类是具有形同属性和方法的集合。譬如跑车的特征是都有轮子、门等,这就是跑车这个对象的属性。还有一些共同的行为,比如都能发动、加速等,这就是方法。
面向对象设计的过程就是抽象的过程,一般分3步来完成:
1)发现类,类定义了对象将会拥有的特征(属性)和行为(方法)。
2)发现类的属性,对象所拥有的静态特征在类中表示时称为类的属性
3)发现类的方法,对象执行的操作称为类的方法。
public class Person{ // 定义人类
// 定义类的属性(特征)
public String name; // 姓名
public String gender; // 性别
public int age; // 年龄
// 定义类的方法(行为)
public void work(){
System.out.println(this.name+"的工作理念:干活挣钱有饭吃");
}
}
二、掌握类的定义和对象的创建
2.1 类的定义
定义类的语法格式:
[访问修饰符] class 类名 {
// 一组属性
// 一组行为
}
定义狗类:
public class Dog {
// 一组属性
String color; // 颜色
String strain; // 品种
String name; // 名称
int age; // 年龄
double weight; // 体重
// 一组行为
public void eat() {
System.out.println("狗爱吃骨头!");
}
public void shout() {
System.out.println("狗吠声!....");
}
}
2.2 对象的使用
创建对象的语法格式:
类名 对象名 = new 类名();
对象名.属性名 = xxx; // 属性的赋值
对象名.方法名(); // 执行对应的方法
创建狗对象:
public class Test {
public static void main(String[] args) {
// 创建对象
Student dog1= new Student();
// 属性赋值
dog1.name = "二哈";
dog1.age = 8;
// 方法调用
dog1.eat();
System.out.println("------------------");
Student dog2= new Student();
// 赋值
dog2.name = "阿毛";
dog2.age = 7;
// 方法调用
dog2.shout();
}
}
【类和对象的关系:】
-
类是一个抽象的概念。
-
类是从一组具有相似特征的对象中发现抽取而出的。
-
对象是类的一个个体/实例
三、掌握方法及方法重载
方法:能够实现某种功能的一个东西。变量可以存储我们单一的数据,而方法则可以存储我们的功能代码段。
方法的基本语法:
// 方法声明
[访问修饰符] 返回值类型 方法名([参数列表]){
// 方法体
[return 返回值;]
}
方法的分类:
1)无参无返方法
2)有参有返方法
3)有参无返方法
4)无参有返方法
public class Person{
public String name; // 姓名
public int age; // 年龄
// 无参无返
public void work(){
System.out.println(this.name+"的工作理念:干活挣钱有饭吃");
}
// 有参无返
public void work(String contect){
System.out.println(this.name+"的工作理念:"+contect);
}
// 有参有返
}
// 无参有返
}
// 创建work()方法时定义的参数叫形式参数,简称形参
// 调用方法时传入的参数叫做实际参数,简称实参
方法重载:方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数类型和参数个数。
方法重载的特点:
- 在同一个类中
- 方法名相同
- 参数个数和类型不同
- 方法的返回值不能作为判断方法之间是否构成重载的依据
四、掌握构造方法及重载
构造方法:创建、构建,类的对象的构建和创建的方法。 当对象创建时都会被执行!
构造方法最重要的意义就是Java给我们提供了能够在对象的创建(生命周期)过程中添加代码的能力。
一般构造方法的应用都是用于一些基本信息的初始化(初始化方法)。
-
每一个类默认情况下JVM都会分配一个无参构造。
-
构造方法没有返回值类型,方法名和类名完全相同。
-
构造方法分为带参方法和无参方法
-
只要你自己创建任意一个构造方法,那么JVM就不再给你分配无参构造了。所以建议无论自己是否编写构造方法,都去手动编写一个默认的无参构造。
方法重载:发生在一个类中的,方法名相同,参数列表不同(个数、顺序、类型)的情况。与访问修饰符和返回值类型无关。
方法重载的意义在于我们要定义相同功能的方法,不需要再花费大量时间去定义n种方法名,而且未来在调用时体验更佳。
五、理解封装的原理
5.1 封装的作用
封装:类和对象章节 当时学到的是半成品的封装。学会发现类,发现类的属性、类的行为。
另外一半的封装概念:将一些不安全的信息进行封装(保护),然后将可以直接被我们使用的部分开放出来(接口)。(提升安全性和可用性,有面向接口编程的思想)
使用步骤: 未来这些类组件都应该采用封装来进行信息保护
-
属性私有化(private)
-
提供公共的getter(getXX())和setter(setXX())方法
-
根据需求在setter和getter方法中添加逻辑判断
5.2 一般JavaBean的规范
JavaBean:其实指的就是我们那些对象类。
-
属性私有化
-
提供公共的getter和setter方法
-
提供无参构造
-
实现序列化接口(序列化其实就是我们的对象在流之间进行转换的一种概念)
5.3 封装的优势
我们未来开发的系统应该非常接近于 高内聚、松耦合(低耦合)。
1. 便于使用者正确使用系统,防止错误修改属性。简单说就是安全 前面属性的例子 自动提款机(钱放在那里,用户自己存钱取钱 自己改存折上的数据不行 取款机要点钱)
2. 有助于系统之间的松耦合(低耦合),提高系统独立性。当某一个系统的实现发生变化时,只要它的接口不变,就不会影响其他的系统,例如:我修改了属性名,如果没有封装,我需要修改程序中不同类n处使用到这属性名的地方,而用了封装,我只需要修改好当前这个类里面向外部提供的方法(接口API)就可以了,因为外部只是在使用我这个方法名而已。
3. 提高软件的可重用性。每个系统都是一个相对独立的整体,可以再多种环境中得到重用。如干电池在相机、手电筒、剃须刀都能使用。
4. 降低了构建大型系统的风险。即使整个系统不成功,个别的独立子系统有可能依然有价值,比如相机损坏了,但电池依然有用,可以安装在手电筒中。
六、掌握包的使用
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
包的作用
-
1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
-
2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
-
3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
包语句的语法格式为:
package pkg1[.pkg2[.pkg3…]];
七、访问修饰符的使用
访问修饰符:在类的语法和方法的语法上,访问修饰符不仅可以修饰属性、也可以修饰方法、还可以修饰类。
- private
[package/default]
当你不写访问修饰符时 代表的就是包级别的访问- protected
- public
同一类中 | 同一包中 | 子类中 | 其他地方 | |
private | √ | |||
默认修饰符 | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |