JAVA课程学习——第五节
1、面向对象和面向过程
- ①概念:
- 面向过程(C语言):在开发程序时,看中的是中间过程,每一个过程步骤都要自己做
- 面向对象(java、c#、js…):开发程序时不看重具体过程,看重的是完成过程的对象
- ②优缺点:
- 面向过程:性能好 / 维护性、扩展性差
- 面向对象:维护性、扩展性好 / 性能差;开销大
- ③面向对象三大特征:封装、继承、多态
2、类和对象
-
关系:类是抽象的,概念上的定义,而对象是类的实例
-
①类:
成员变量(属性):定义在类下面方法之外的变量
成员方法(行为):去掉static关键字,就是一个成员方法
- ②对象:
- 创建对象:
类名 对象名=new 类名();
- 调用类的属性:
对象名.属性名
- 调用类的方法:
对象名.方法名
3、成员变量和局部变量
- 区别
- ①定义的位置不同:成员变量定义在类内部方法之外,局部变量定义在方法内部
- ②作用域不同:成员变量作用在类内部,局部变量作用在方法之内
- ③默认值不同:成员变量有默认值,局部变量没有默认值
- ④内存中的位置不同:成员变量保存在堆里面,局部变量保存在栈里面
- ⑤访问修饰符不同:
(1)成员变量有四种访问修饰符(private、protected、public、缺省)
(2)局部变量没有访问修饰符,默认与方法的修饰符相同
- 成员变量和局部变量重名:
- 遵循“就近原则”使用局部变量的值
- 区分成员变量和局部变量:使用
this
关键字
this
:this代表当前使用或者正在使用的对象,谁通过哪个对象调用了方法谁就是this
- this可以修饰成员变量,方法,构造方法
①直接在成员变量名或方法名前jiashangthis
②在构造方法中通过”this(形参)
“(注意:必须写在首行)的方式调用本类其他构造方法
4、面向对象—封装
java中通过将数据声明为私有的(private),再提供公有的(public)方法(getxx()和setxx())实现对该属性的操作,以达到目的
- 构造方法
创建对象的时候,会用到一个特殊的方法:构造方法(构造器)
构造方法:public 构造方法名(形参){ }
注意:
①构造方法没有返回值
②构造方法必须与当前类名完全一致,包括大小写
③构造方法可以使用方法重载
④一旦显式定义了一个构造方法,系统不会再提供一个默认的无参构造方法,需要自己手动添加
构造方法作用:
构造方法赋值和set方法赋值:
①set方法可以针对单个变量进行更改
②构造方法赋值new对象的同时给属性赋值,针对多个对象赋值
5、面向对象—继承
- 定义:子类继承父类,允许子类拥有父类的属性和行为(父类中私有除外)(共性抽取)
- 关键字(extends):
public class 子类 extends 父类()
- 优缺点:
- 优点:提高了代码的复用性
- 缺点:由于继承会有多层的继承关系,会提高类之间的依赖关系,耦合度变高
- 注意:①一个子类只能有一个父类,一个父类可以有多个子类 ②所有类的基类都是Object
1、继承中的方法重写(重点
)
-
方法重写:如果父类中的方法无法满足子类要求时,子类可以对父类的方法进行重写
-
重写规则:
- ①要求子类重写的方法名、参数列表、返回值类型与父类完全一致
- ②子类重写方法的访问修饰符权限不能低于父类方法修饰符权限
- ③子类方法和父类方法必须同为static或非static
2、方法重载(overload)和方法重写(override)的区别(重点
):
- ①方法重载必须在同一个类中,方法重写必须存在继承关系
- ②方法重载要求方法名相同、参数列表必须不同和返回值无关
- ③方法重写要求子类方法名、参数列表、返回值类型与父类完全相同
3、super关键字
super关键字:可以修饰属性、方法、构造方法
- ①当子类和父类的属性出现重名时,默认会调用子类的属性,可以通过“
super.属性名
”的方式,显式的调用父类声明的同名属性
- ②子类重写父类方法后,如果子类想再次调用父类被重写前的方法可以通过"
super.方法名
"的方式调用父类方法- ③super还可以修饰构造方法,通过子类构造方法中使用“
super(形参)
”来显式调用父类对应的构造方法
6、面向对象—多态
- ①多态的前提必须有继承或者接口的实现
- ②同一个动作与不同的对象产生不同的行为
- ③多态指的是一个对象的多种形态
多态的体现方式
- ①使用继承:不同的子类重写父类后,体现出来的形式不一样
- ②接口的实现也是一种多态
形成多态的必要条件
- ①继承:存在子类和父类的关系
- ②接口实现:定义一个类实现对应的接口
- ③重写:子类重写了父类的方法
- ④重载:调用相同的方法名,实现的功能不一样
- ⑤子类对象的多态性(
重点
):父类的引用指向子类的实例
注意
:程序分为两种状态:编译状态和运行状态
例子:Pet p=new Dog(...);
对于多态来说,编译时看语句的左边,左边的变量定义什么类型就是什么类型;
运行时,看语句的右边,右边变量是真正执行的对象,执行的是子类重写后的方法
下转型和上转型
- 向上转型:将子类对象转换成父类引用(自动转换)
- 向下转型:将父类对象转换成子类引用(强制类型转换)
final关键字
final关键字:修饰类、方法、成员变量、局部变量
- ①修饰类:修饰的类不能被继承,但是可以继承别的类
- ②修饰方法:修饰的方法是一个最终方法,不能被重写
- ③修饰成员变量:修饰的成员变量值不可改变
(1)成员变量不再有默认值(2)使用final关键字必须直接对成员变量进行赋值
- ④修饰局部变量:修饰的局部变量值不可改变,一般用来修饰常量
static关键字
static关键字:修饰成员变量、方法、代码块
- (1)修饰成员变量:
- ①修饰的成员变量不再属于对象,而属于类本身,可以通过
类名.属性名
调用- ②只要通过static修饰的属性所在类创建的对象,都可以共享这个属性
- ③当其中一个对象对类变量进行修改以后,其他对象的这个类变量也会修改
- ④类变量随着类的加载而加载
- ⑤类变量放在方法区的静态域当中
- (2)修饰方法
- 修饰后的方法属于类本身,可以通过
类名.方法名()
调用- 随着类的加载而加载
- 在静态方法中只能使用静态变量和静态方法
不能使用this和super关键字
- (3)修饰代码块(代码块作用:完成初始化)