1.封装
1.1 为什么使用
目前,我们可以对属性任意赋值,有些值不符合我们的实际需求。为了不允许随意直接操作属性,
Java
中,提供了一种机制:封装。就跟你生活中的包装类似。
1.2 什么是封装
1.
封装是面向对象三大特征之一,四个
[
抽象
]
2.
将属性隐藏起来,即不允许在外部【其他类中,直接操作】,通过方法去赋值,同时可以在方
法中加入我们的判断逻辑。
1.3 好处
将属性保护起来,提高安全性
1.4 封装怎么玩
1. 属性私有,使用关键字 private 修饰
2.
通过公共的【
public
修饰的】方法,进行属性的取值【
getXxx
】和赋值【
setXxx
】操作,以及
如果需要加入逻辑判断,在公共方法中加入。
使用
IDEA
工具直接生成
getXxx
和
setXxx
方法
代码编辑区
---
》 右键
---
》
generate
2.包
2.1 为什么使用
对比
windows
下文件管理的方式,就看成是文件夹
1.
可以将代码分门别类进行有组织的管理;
---
》 常用
2.
对于同名的类,可以放在不同的包
3.
包可以限定访问权限控制
2.2 IDEA如何新建
我们通常是实现规划好包名
方式
1
:新建包,然后在包下创建类
2.3 导包方式
1.
导入其他包下的类:
import exer04.Stu
;
2.
若需要导入多个包下同名的类,需要使用全类名引入,即
包名
.
类名
的方式
test01.Stu ss = new test01.Stu()
;
2.4 命名规则
1.
组成:数字、字母、下划线,一般都是字母,最多配上数字,比较多见
2.
一般使用小写
3.
一般使用域名倒置
www.baidu.com
,倒置
com.baidu.
项目名称
.
模块名称
.xxx
4.继承
4.1 为什么要有
前面写了
Dog
和
Penguin
,他们有没有共性【属性
name
、
health
、
love
和方法】,都将其划归为宠物
类。有很多重复代码,比如又来一个
Cat
,它可能也有
name
、
health
、
love
。针对上述同一个类别
【
Pet
】下的多个宠物,能否将其共性抽取出来,目的:①简化代码;②可维护性和扩展性好。
Java
提供了解决机制:继承
4.2 继承是什么
继承是面向对象三大特征之一。
将共性【属性和方法】抽取出来,放到一个类中,这个类我们称之为父类
/
基类
/
超类。在
java
中,
只有父类,只要是你的长辈都称为父类。区别于生活中的称呼。
继承的前提:满足
is a
关系
4.3 继承怎么用
1.
抽取共性,放到父类中
2.
建立子父类之间的关系,用一个关键字
extends
3.
在子类中,编写子类特有的属性和方法
4.4 继承细节
理解即可
1. java
中没有多继承,只有单根继承,只有一个亲爹,干爹不算。即
extends
后面只能有一个类
2. java
中可以有多层继承:
A extends B
,
B extends C
,
A
和
B
的关系,
A
和
C
的关系,
B
和
C
都是
A
的父类,
B
是
A
的直接父类,
C
是
A
的间接父类
3.
哪些成员【属性、普通方法、构造方法】可以继承?哪些不能继承?
①属性能否继承:
ok
②普通方法能否继承:
ok
③构造方法能否继承:不能,若能的话,子类可以造爹。
哪些修饰符修饰的可以继承:
public
、
protected
【参见我们上的访问修饰符】、
默认
【同包】
哪些修饰修饰的不能继承:
private
4.
继承下的构造方法如何执行?
①先父后子,先有父类,再有子类。不是孙悟空,必须现有父类的存在,才能创建子类对象。
②若在子类中,显示的用
this
调用了其他的构造方法,先走
this
的这个构造,然后走你调用的那个
③若在子类中,显示的使用
super
调用父类的构造方法,先走父类对应参数的构造,然后走子类自
己的
5.
继承关系之间的类图
![](https://i-blog.csdnimg.cn/blog_migrate/94b9b01aac9b55c075ebd95a23de3b73.png)
4.5 super vs this
this
:当前类中
super
:子类中使用,调用的是父类的构造方法、属性、方法
用法跟this一样
4.6 方法重写
vs
重载
从父类继承过来的方法,可能不满足子类的需求,需要重新改造,我们称之为方法重写
/
覆盖。
前提:继承
/
实现【接口】
重写的特点:
1.
方法名相同,参数列表相同
2.
返回类型相同或者是其子类
3.
访问修饰符,不能严于父类,比如父类是默认,子类只能是默认、
protected
、
public
4.
还有子类抛出的异常要大于等于父类
5.抽象类
5.1 为什么要有
我们每个宠物都可以有一个
eat
方法,但是每个宠物具体吃什么,我们不知道也不关心,所以,我们将
这样的方法(只关心有这么一个行为,不关心具体实现)定义为抽象方法,抽象方法若在一个类中,对
类的要求是,该类是一个抽象类。
好处:
1.
父类只定义行为,不关心实现,即该方法没有方法体;
2.
上面的方法重写,其实并没有强制必须重写,但是若使用了抽象方法,子类必须重写抽象方法或者
子类也为抽象类。
抽象类的目的:其实还是为了使用继承关系,所以依然满足
is a
的关系。
5.2 使用
1.
对类使用关键字
abstract
进行修饰
2.
方法使用
abstract
进行修饰,同时没有方法体,除此以外,跟之前的方法声明没有任何区别
5.3
细节
1.
抽象类能否实例化(创建对象)?
语义层面:若可以创建对象,就可以调用抽象方法,怎么执行???? 不成立
语法层面:
Java
语法不允许
2.
抽象类中可以有哪些成员?
①成员变量
②普通方法
③抽象方法:非必须
④构造方法,子类在创建对象的时候,需要调用父类的构造方法
⑤代码块、内部类
6.小结
1. 封装
好处、用法【属性私有化、
getXxx
和
setXxx
方法,通过
getXxx
和
setXxx
获取和设置属性值】
2.
包