面向对象编程的基础:类和对象
1、类的定义:类是对具有共同状态和行为规则的多个事物的统一描述;类描述了具有共同特性(数据元素)和行为(功能)的对象集合。
2、对象的定义:在现实世界中,对象是客观存在的某一事物,普遍具有两个特性:状态(属性)和行为。
在面向对象程序设计中,对象是一组数据和相关方法的集合。
3、面向对象三要素:封装、继承、多态
3.1、封装:封装是将代码及其处理的数据绑定在一起的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被误用。封装的目的在于使对象的设计者和使用者分开,使用者不必知道对象行为实现的细节,只需要使用设计者提供的接口访问对象。
3.1.1、封装的好处:(1)模块化:代码的编写和维护可以独立进行,不会影响其他模块,而且有很好的重用性;
(2)数据隐藏:提高了数据的安全性。
3.2、继承:继承是面向对象程序设计中两个类之间的一种关系,是一个类可以继承另一个类的状态和行为。被继承的类称为父类,继承父类的类称为子类。一个父类可以同时拥有多个子类,但是一个子类只能继承一个父类。每一个子类除了从父类继承父类的变量和方法外,也可以添加自己的变量和方法。
继承的好处:使父类代码得到重用,节省一些代码的编写工作,提高编程效率。
3.3、多态:多态性可以用“一个对外接口,多个内在实现方法”来表示。即在一个中可以定义多个同名,但参数的类型或者个数不同的方法,程序在调用方法时,系统会自动根据参数类型和个数调用不同的方法。这种机制称为方法的重载。此外,当利用继承由父类创建子类时,可以重新定义父类中的某些方法,这被称为覆盖。
在Java中,通过方法覆盖和重载方法来实现程序的多态。
面向对象(成员变量和局部变量的区别)(掌握)
A:在类中的位置不同
成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
B:在内存中的位置不同
成员变量:在堆内存
局部变量:在栈内存
C:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化值不同
成员变量:有默认初始化值
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
注意事项:: 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
面向对象(方法的形式参数是类名的时候如何调用)(掌握)
A:Java中参数传递问题
形式参数
基本类型:形式参数的改变不影响实际参数
引用类型:形式参数的改变直接影响实际参数
B:方法的参数是类名
如果你看到了一个方法的形式参数是一个类类型(引用类型),这里其实需要的是该类的对象。
面向对象(匿名对象的概述和应用)
A:什么是匿名对象
就是没有名字的对象
B:匿名对象应用场景
a:调用方法,仅仅只调用一次的时候。
b:匿名对象可以作为实际参数传递
C:案例演示
匿名对象应用场景
面向对象(private关键字的概述和特点)
A:private关键字特点
a:是一个权限修饰符
b:可以修饰成员变量和成员方法
c:被其修饰的成员只能在本类中被访问
B:案例演示
private关键字特点
面向对象(private应用的标准案例)
A:private最常见的应用:
(1):把成员变量用private修饰
(2):提供对应的getXxx()和setXxx()方法
B:案例演示
演示使用封装来完善我们的学生类
面向对象(构造方法概述和格式)
A:构造方法概述和作用
创建对象,给对象中的成员进行初始化
B:构造方法格式特点
a:方法名与类名相同
b:没有返回值类型,连void都没有
c:没有具体的返回值
面向对象(构造方法的重载及注意事项)
A:案例演示
构造方法的重载
B:构造方法注意事项
a:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
b:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。
注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法
C:给成员变量赋值的两种方式
a:setXxx()方法
b:构造方法
面向对象(一个标准学生类的代码及测试)
A:案例演示
完善一下我们的学生的类
B:给成员变量赋值:
a:setXxx()方法
b:构造方法
C:输出成员变量值的方式:
a:通过getXxx()分别获取然后拼接
b:通过调用show()方法搞定