关联和依赖
关联是
一种结构关系
,说明一个事物的对象与另一个事物的对象相联系。给定有关联的两个类,可
以从一个类的对象得到一个类的对象。关联有两元关系和多元关系。两元关系是指一种一对一的关系, 多元关系是一对多或多对一的关系.
关联就是某个对象会长期的持有另一个对象的引用
,而二者的关联往往也是相互的。关联的两个对
象彼此间没有任何强制性的约束,只要二者同意,可以随时解除关系或是进行关联,它们在生命期问题 上没有任何约定。被关联的对象还可以再被别的对象关联,所以关联是可以共享的。
两个类之间的简单关联表示了两个同等地位类之间的结构关系。当你想要表示结构化关系时使用关
联。
关联表示
has-a
关系,如学生拥有一个课程,往往表现为
B
作为
A
的
属性存在
(
A
关联
B)。
依赖关系
依赖关系是一种
使用关系
,特定事物的改变有可能会影响到使用该事物的事物,反之不成立
此关系最为简单,也最好理解,所谓依赖就是某个对象的功能依赖于另外的某个对象,而被依赖的
对象只是作为一种
工具在使用
,而并不持久对它的引用
依赖体现了
“
use a”
关系
依赖关系一般使用
方法的参数
体现。
一个人自出生就需要不停的呼吸,而人的呼吸功能之所以能维持生命就在于吸进来的气体发挥了作
用,所以说空气只不过是人类的一个工具,而人并不持有对它的引用。
权限修饰符
1
概述
在
Java
中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问
权限,
public
:公共的
,
最高权限
,
被
public
修饰的成员
,
在哪里都能访问
protected
:受保护的
default
:
:
默认的 注意
不写权限修饰符就是默认权限
,
不能直接把
default
写出来
private
:私有的
,
只能在自己的类中直接访问
public
具有最大权限
,private
有最小权限
编写代码时
,
如果没有特殊的考虑
,
建议这样使用权限:
1.
属性
:
用
private
->
封装思想
2.
成员方法
public
->
便于调用
3.
构造
public
->
便于
new对象
final 关键字
final 关键字
概述
:
最终的
2.
使用
:
a
.
修饰一个类
(
不能被继承,如
String
类
)
b
.
修饰一个方法
(
不能被重写
)
c
.
修饰一个局部变量(不能修改值,常量)
d
.
修饰一个成员变量
e.修饰一个对象(不能修改内存空间,但是可以改对象的值)
接口
(
重点
)
接口是设计层面的概念,往往由设计师 设计,将定义与实现分离
程序员实现接口,实现具体方法
面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思
想,而是附属于面向对象思想体系,属于其一部分。或者说,它是面向对象编程体系中的思想精髓之 一。接口是
Java
的灵魂
。
面向接口编程的意思是指在面向对象的系统中所有的类或者模块之间的交互是由接口完成的。
继承:共同的属性和方法,并且同一个种族。
is a
关系
Student Person
Student is a Person
接口:
具有相同的方法
(
行为
)
就可以使用接口
。
没有种族概念
。满足
has a
关系
学生具有自我介绍的行为:
Student
类
学校也有一个自我介绍的行为:
School
类
此时可以定义一个接口。接口中定义一个自我介绍的方法。
学生类和学校同时实现这个接口。Introduce
接口中可以定义的成员
:
a
.
jdk7
以及之前
:
抽象方法
:
public abstract
->
即使不写
public
abstract
,
默认也有
成员变量
:
public static final
数据类型 变量名
=
值
->
即使不写
public
static final
,
默认也有
final
是最终的
,
被
final
修饰的变量不能二次赋值
,
所以我们一般将
final
修饰的
变量视为常量
b
.
jdk8
:
默认方法
:
public default
返回值类型
方法名
(
形参
){}
静态方法
:
public static
返回值类型
方法名
(
形参
){}
c
.
jdk9
开始
:
私有方法
:
private的方法
接口的特点
接口的特点
当一个类实现多个接口时
,
如果接口中的抽象方法有重名且参数一样的
,
只需要重写一次
1.
格式
:
public static final
数据类型 变量名
=
值
2.
相关知识点
:
final
final
代表最终的
,
被它修饰的变量
,
不能二次赋值
,
可以视为常量
3.
特点
:
不写
public
static final
默认也有
4.
使用
:
接口名直接调用
接口的特点
1.
接口可以多继承
->
一个接口可以继承多个接口
public interface
InterfaceA
extends
InterfaceB
,
InterfaceC
{}
2.
接口可以多实现
->
一个实现类可以实现一个或者多个接口
public class
InterfaceImpl
implements
InterfaceA
,
InterfaceB
{}
3.
一个子类可以继承一个父类的同时实现一个或者多个接口
public class
Zi
extends
Fu
implements
InterfaceA
,
InterfaceB
{}
4.
注意
:
继承也好
,
实现接口也罢
,
只要是父类中或者接口的抽象方法
,
子类或者实现类都要重写
接口和抽象类的区别
接口和抽象类的区别
相同点
:
a
.
都位于继承体系的顶端
,
用于被其他类实现或者继承
b
.
都不能
new
c
.
都包含抽象方法
,
其子类或者实现类都必须重写这些抽象方法
不同点
:
a
.
抽象类
:
一般作为父类使用
,
可以有成员变量
,
构造
,
成员方法
,
抽象方法等
b
.
接口
:
成员单一
,
一般抽取接口
,
抽取的都是方法
,
视为功能的大集合
c
.
类不能多继承
,
但是接口可以
第五章 . 多态 ( 重点 )
第五章 . 多态 ( 重点 )
多态的介绍
1.
前提
:
a
.
必须有子父类继承或者接口实现关系
b
.
必须有方法的重写
(
没有重写
,
多态没有意义
),
多态主要玩的是重写方法
c
.
new
对象
:
父类引用指向子类对象
Fu fu
=
new
Zi
()
->
理解为大类型接收了一个小类型的数据
->
比如
double
b
=
10
2.
注意
:
多塔下不能直接调用子类特有功能
多态的好处 ( 为什么学多态 )
多态的好处 ( 为什么学多态 )
1.
问题描述
:
如果使用原始方式
new
对象
(
等号左右两边一样
),
既能调用重写的
,
还能调用继承的
,
还能调用自己特有的成
员
但是多态方式
new
对象
,
只能调用重写的
,
不能直接调用子类特有的成员
,
那为啥还要用多态呢
?
2.
多态方式和原始方式
new
对象的优缺点
:
原始方式
:
a
.
优点
:
既能调用重写的
,
还能调用父类非私有的
,
还能调用自己特有的
b
.
缺点
:
扩展性差
多态方式
:
a
.
优点
:
扩展性强
b
.
缺点
:
不能直接调用子类特有功能
多态中的转型
向上转型
多态中的转型
向上转型
1.
父类引用指向子类对象
好比是
:
double
b
=
1
;
向下转型
向下转型
1.
向下转型
:
好比强转
,
将大类型强制转成小类型
2.
表现方式
:
父类类型 对象名
1
=
new
子类对象
()
->
向上转型
->
double
b
=
1
子类类型 对象名
2
=
(
子类类型
)
对象名
1
->
向下转型
->
int
i
=
(
int
)
b
3.
想要调用子类特有功能
,
我们就需要向下转型
转型可能会出现的问题
转型可能会出现的问题
1.
如果等号左右两边类型不一致
,
会出现类型转换异常
(
ClassCastException
)
2.
解决
:
在向下转型之前
,
先判断类型
3.
怎么判断类型
:
instanceof
判断结果是
boolean
型
4.
使用
:
对象名
instanceof
类型
->
判断的是关键字前面的对象是否符合关键字后面的类型