一、类和对象
1.1 面向过程与面向对象
面向过程 :是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现的
面向对象 :是一种以对象为中心的编程思想,通过指挥对象实现具体的功能
举例:
吃火锅

1.2 类和对象的关系
客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。
类的理解
简单理解:类就是对现实事物的一种描述。
类是对象的数据类型,类是具有相同属性和行为的一组对象的集合。
类是对现实生活中一类具有共同属性和行为的事物的抽象。
类的组成
属性:指事物的特征,例如:手机事物(品牌,价格,尺寸)行为:指事物能执行的操作,例如:手机事物(打电话,发短信)。
类和对象的关系。类:类是对现实生活中一类具有共同属性和行为的事物的抽象。对象:是能够看得到摸的着的真实存在的实体。
简单理解:类是对事物的一种描述,对象则为具体存在的事物
1.3 类的定义
类的组成是由属性和行为两部分组成
属性:在类中通过成员变量来体现(类中方法外的变量)
行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)
讯享网1.4 对象创建和使用
创建对象格式:
讯享网
调用成员格式:
1.5 成员变量和局部变量区别
类中位置不同:成员变量(类中方法外)局部变量(方法内部或方法声明上)
内存中位置不同:成员变量(堆内存)局部变量(栈内存)
生命周期不同:成员变量(随着对象的存在而存在,随着对象的消失而消失)局部变量(随着方法的调用而存在,醉着方法的调用完毕而消失)
初始化值不同:成员变量(有默认初始化值)局部变量(没有默认初始化值,必须先定义,赋值才能使用)
二、 封装
2.1 关键字
2.1.1 private关键字
概述 : private是一个修饰符,可以用来修饰成员(成员变量,成员方法)
特点 : 被private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用, 提供相应的操作
提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰
提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰
2.1.2 this关键字
概述 : this修饰的变量用于指代成员变量,其主要作用是(区分局部变量和成员变量的重名问题)
方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量
2.2 封装思想
- 封装概述 是面向对象三大特征之一(封装,继承,多态) 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的
- 封装原则 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 成员变量private,提供对应的get/set方法
- 封装好处 通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性
三、构造方法
3.1 构造方法格式和执行
3.1.1 格式注意
方法名与类名相同,大小写也要一致
没有返回值类型,连void都没有
没有具体的返回值(不能由retrun带回结果数据)
3.1.2 执行
创建对象的时候调用,每创建一次对象,就会执行一次构造方法
不能手动调用构造方法
3.2 构造方法注意事项
构造方法作用:用于给对象的数据(属性)进行初始化
构造方法的创建 :
如果没有定义构造方法,系统将给出一个默认的无参数构造方法如果定义了构造方法,系统将不再提供默认的构造方法
推荐的使用方式 :
无论是否使用,都手动书写无参数构造方法,和带参数构造方法
四、继承
4.1 继承的实现
4.1.1 继承概念
继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法
4.1.2 继承格式
继承通过extends实现
格式:
讯享网
作用:
继承可以让类与类之间产生关系,子父类关系,产生子父类后,子类则可以使用父类中非私有的成员。
4.2 继承利弊
4.2.1 继承好处
提高了代码的复用性(多个类相同的成员可以放到同一个类中)
提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
4.2.2 继承弊端
继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性
4.3 Java中继承特点
- Java中类只支持单继承,不支持多继承 错误范例:class A extends B, C { }
- Java中类支持多层继承
4.4 继承中访问特点
4.4.1 变量访问特点
在子类方法中访问一个变量,采用的是就近原则。
- 子类局部范围找
- 子类成员范围找
- 父类成员范围找
- 如果都没有就报错(不考虑父亲的父亲…)
4.4.2 构造方法访问特点
注意:子类中所有的构造方法默认都会访问父类中无参的构造方法
子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化,原因在于,每一个子类构造方法的第一条语句默认都是:super()
注意: this(…)super(…) 必须放在构造方法的第一行有效语句,并且二者不能共存
4.4.3成员方法访问特点
通过子类对象访问一个方法
- 子类成员范围找
- 父类成员范围找
- 如果都没有就报错(不考虑父亲的父亲…)
4.5 super关键字
this&super关键字:
this:代表本类对象的引用
super:代表父类存储空间的标识(可以理解为父类对象引用)
this和super的使用分别
成员变量:
this.成员变量 - 访问本类成员变量
super.成员变量 - 访问父类成员变量
成员方法:
this.成员方法 - 访问本类成员方法
super.成员方法 - 访问父类成员方法
构造方法:
this(…) - 访问本类构造方法
super(…) - 访问父类构造方法
4.6 方法的重写
4.6.1 方法重写概念
子类出现了和父类中一模一样的方法声明(方法名一样,参数列表也必须一样 )
4.6.2 方法重写应用场景
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容
4.6.3 Override注解
用来检测当前的方法,是否是重写的方法,起到【校验】的作用
4.6.4 方法重写注意事项
- 私有方法不能被重写(父类私有成员子类是不能继承的)
- 子类方法访问权限不能更低(public > 默认 > 私有)
- 静态方法不能被重写,如果子类也有相同的方法,并不是重写的父类的方法
4.6.5 权限修饰符

五、抽象类
5.1 抽象类概述
当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了!
在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类!
5.2 抽象类特点
5.2.1 抽象类定义
抽象类和抽象方法必须使用 abstract 关键字修饰

5.2.2 抽象类注意
抽象类不一定有抽象方法,有抽象方法的一定是抽象类
抽象类不能实例化
抽象类可以有构造方法
抽象类的子类
要么重写抽象类中所有抽象方法
要么是抽象类
5.3 模版设计模式
设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。
模版设计模式
把抽象类整体就可以看做成一个模板,模板中不能决定的东西定义成抽象方法 让使用模板的类(继承抽象类的类)去重写抽象方法实现需求
5.4 final关键字
5.4.1 final关键字作用
final代表最终的意思,可以修饰成员方法,成员变量,类
5.4.2 final修饰类,方法,变量效果
final修饰类:该类不能被继承(不能有子类,但是可以有父类)
final修饰方法:该类不能被重写
final修饰变量:表明该变量是一个常量,不能被再次赋值
java面向对象的基础知识
变量是基本类型,不能改变的是值
变量是引用类型,不能改变的是地址值,但地址里面的内容是可以改变的
六、代码块
6.1 代码块概述
在Java中,使用{}括起来的代码被称为代码块
6.2 代码块分类
6.2.1 局部代码块
位置:方法中定义
作用:限定变量的生命周期,及早释放,提高内存利用率
6.2.2 构造代码块
位置:类中方法外定义
特点: 每次构造方法执行的时,都会执行该代码块中的代码,并且在构造方法执行前执行
作用: 将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性
6.2.3 静态代码块
位置:类中方法外定义
特点: 需要通过static关键字修饰,随着类的加载而加载,并且只执行一次
作用: 在类加载的时候做一些数据初始化的操作
七、接口
7.1 接口的概述
接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。
Java中接口存在两个意义
1.用来定义规范
2.用来做功能的拓展
7.2 接口的特点
7.2.1 接口定义
接口使用关键字interface修饰
类实现接口用implements表示
7.2.2 接口注意
接口不能实例化,我们可以创建接口的实现类对象使用
接口的子类
要么重写接口中所有抽象方法
要么子类也是抽象类
7.3 接口成员特点
成员特点
成员变量
只能是常量 默认修饰符:public static final
构造方法
没有,因为接口主要是扩展功能的,而没有具体存在
成员方法
只能是抽象方法
默认修饰符:public abstract
关于接口方法,JDK8和JDK9中有一些新特性
7.4 类和接口的关系
类与类的关系
继承关系,只能单继承,但是可以多层继承
类与接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
接口与接口的关系
继承关系,可以单继承,也可以多继承
7.5 接口组成更新
7.5.1 接口中默认方法
格式
作用:解决接口升级问题
注意
默认方法不是抽象方法,所以不强制被重写。但是可以被重写,重写的时候去掉default关键字
public可以省略,default不能省略
如果实现了多个接口,多个接口中存在相同的方法声明,子类就必须对该方法进行重写
7.5.2 接口中静态方法
格式
注意
静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
public可以,static不能省略
7.5.3 接口中私有方法
格式1
格式2
注意
默认方法可以调用私有的静态方法和非静态方法
静态方法只能调用私有的静态方法
八 、多态
8.1 多态概念
同一个对象,在不同时刻表现出来的不同形态
8.2 多态的前提
要有继承或实现关系
要有方法的重写
要有父类引用指向子类对象
8.3 多态成员访问特点
成员变量
编译看父类,运行看父类
成员方法
编译看父类,运行看子类
8.4 多态的利弊
好处
提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作
弊端
不能使用子类的特有成员
8.5 多态中的转型
向上转型
父类引用指向子类对象就是向上转型
向下转型
格式:子类型 对象名 = (子类型)父类引用;
8.6 多态转型存在的风险与解决
风险
如果被转的引用类型变量,对应的实际类型和目标类型不是同一种类型,那么在转换的时候就会出现ClassCastException
解决方案
关键字
instanceof
使用格式
变量名 instanceof 类型
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/6930.html