Java面向对象总结(一)
前言
Java面向对象基础总结
一、类和对象是什么?
类是用来描述一类具有共同属性和行为事物的统称。所以其实类在客观世界里是不存在的,是抽象的,只是用来描述数据信息的。
对象是类的一个实例,具体存在的,看得见摸得着的,并且具备该类事物的属性和行为
- 对象的属性:对象的属性具有特定的值
- 对象的行为:对象可以操作的行为
类和对象的关系
-
类是对一类具有共同属性和行为的事物的统称,是抽象的
-
对象是一类事物的具体实例,看得见,摸的着的,真实存在的实体,是具体的
-
类是对象的抽象,对象是类的实体
局部变量和成员变量的区别
位置不同,内存中位置不同,生命周期不同,默认值不同
位置不同: 成员变量在类中,方法外;局部变量在方法中
内存中位置不同: 成员变量在堆区; 局部变量在栈区
生命周期不同;
二、Java的三大特性
1.封装
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
封装原则
- 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
- 例如:成员变量使用private修饰,提供对应的getXxx()/setXxx()方法
好处:
• 将变化隔离。
• 便于使用。
• 提高重用性。
• 提高安全性。
封装原则:
• 将不需要对外提供的内容都隐藏起来。
• 把属性都隐藏,提供公共方法对其访问 。
2.继承
继承:在java中指的是“一个类”可以“继承自”“另一个类”。 "被继承的类"叫做: 父类/超类/基类,"继承其他类的类"叫做:子类。继承后,“子类”中就“拥有”了“父类”中所有的成员(成员变量、成员方法)。 “子类就不需要再定义了”。
继承的好处
- 提高代码的复用性(减少代码冗余,相同代码重复利用)。
- 使类与类之间产生了关系。
子类调用父类的成员特点
构造方法: 无法继承
私有成员: 可以继承,但无法直接访问
非私有成员: 可以继承,优先在子类中查找,如果有,就直接使用,如果没有,就去父类中找,依次类推
3.多态
定义
- 多态: 是指同一行为,对于不同的对象具有多个不同表现形式。
- 程序中多态: 是指同一方法,对于不同的对象具有不同的实现.
前提条件
1. 继承或者实现【二选一】
2. 父类引用指向子类对象\接口引用指向实现类对象【格式体现】
3. 方法的重写【意义体现:不重写,无意义】
好处
提高了代码的扩展性
弊端
多态的情况下,只能调用父类的共性内容,不能调用子类的特有内容。
多态向上转型和向下转型
向上转型: 子类类型向父类类型转换的过程,这个过程是自动的
向下转型: 父类类型向子类类型转换的过程,这个过程是强制的
子类类型 对象名 = (子类类型)父类类型的变量;
注意:
1.向下转型的时候:右边父类类型的变量一定要指向要转型的子类类型的对象
2.不管是向上转型还是向下转型,一定满足父子类关系或者实现关系
三、部分特殊字符
1、修饰符public、protected、default、private
不同权限修饰符的访问能力:
修饰符 | 本类中 | 同包中 | 不同包的子类 | 不同包的无关类 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
空default | √ | √ | × | × |
private | √ | × | × | × |
访问权限大小: public > protected > 空 > private
使用:
类: public
成员变量: private
成员方法: public
构造方法: public \ private(单列设计模式)
2、关键字final
final: 不可改变。可以用于修饰类、方法和变量。
- 类:被修饰的类,不能被继承。
- 方法:被修饰的方法,不能被重写。
- 变量:被修饰的变量,就只能赋值一次,不能被重新赋值。
查询API发现像public final class String
、public final class Math
、public final class Scanner
等,很多我们学习过的类,都是被final修饰的,目的就是供我们使用,而不让我们所以改变其内容。
3、关键字static
static关键字概述
static是一个静态修饰符关键字,表示静态的意思,可以修饰成员变量和成员方法以及代码块。
static修饰成员变量
当 static
修饰成员变量时,该变量称为类变量。该类的每个对象都共享同一个类变量的值。任何对象都可以更改该类变量的值,但也可以在不创建该类的对象的情况下对类变量进行操作。
定义格式:
static 数据类型 变量名;
静态成员变量的访问方式:
对象名.静态成员变量名; 不推荐
类名.静态成员变量名; 推荐
static修饰成员方法:
格式: 在返回值类型前面加static关键字
使用: 类名.静态方法名(实参);
注意事项:
1.静态方法中不能出现this
2.静态方法中只能直接访问静态成员变量和成员方法
3.非静态方法中可以直接访问一切成员变量和成员方法
static修饰成员变量:
格式: static 数据类型 变量名;
使用; 类名.静态成员变量名
特点; 被static修饰的变量会被该类的所有对象共享
4、this关键字
this关键字:
1.作用: 用来区分同名的成员变量和局部变量
2.格式: this.成员变量名
3.this含义:代表当前对象
当前对象: 谁调用this所在的方法,谁就是当前对象
结论:哪个对象调用this所在的方法,this就表示哪个对象
5、super关键字
super关键字的三种用法:
super可以访问父类的成员变量: super.成员变量 一般用来区分父子类中同名的成员变量
super可以访问父类的成员方法: super.成员方法(实参); 一般用来在子类中访问父类的成员方法
super可以访问父类的构造方法:
空参构造: super();
有参构造: super(实参);
注意:
1.子类的构造方法默认会调用父类的空参构造方法
2.super访问父类的构造方法,可以用来初始化从父类继承过来的属性
3.在子类的构造方法中,使用super调用父类的构造方法,必须放在子类构造方法的第一行
super的注意事项一
- super访问成员变量和成员方法: 优先去父类中找,如果有就直接使用,如果没有就去爷爷类中找,如果有,就用,依次类推…
super的注意事项二
- 子类的构造方法默认会调用父类的空参构造方法,如果父类中的没有空参构造方法,只定义了有参构造方法,会编译报错