java13 面向对象深刻 3
纲要
这里没有写
面向对象 - 封装性
了解
封装(encapsulation)怎么去了解,一台电脑利用一个外壳包裹,爱护了外面的电器元件,提供了大量的按键与其对接应用。我要看电视,只须要按一下开关和换台就能够了。有必要理解电视机外部的构造吗?有必要碰碰显像管吗?制造厂家为了不便咱们应用电视,把简单的外部细节全副封装起来,只给咱们裸露简略的接口,比方:电源开关。具体怎么外部实现的,咱们不须要操心。
须要让用户晓得的裸露进去,不须要让用户理解的全副暗藏起来。这就是封装, 文言:“该露的露,该藏的藏”。
概念
咱们程序设计要谋求“高内聚,低耦合”。高内聚就是类的外部数据操作细节本人实现,不容许内部干预;低耦合:仅裸露大量的办法给内部应用。利用抽象数据类型将数据和基于数据的操作封装在一起,使其形成一个不可分割的独立实体,数据被爱护在抽象数据类型的外部,尽可能地暗藏外部的细节,只保留一些对外接口使之与内部产生分割。零碎的其余局部只有通过包裹在数据里面的被受权的操作来与这个抽象数据类型交换与交互。也就是说,用户无需晓得对象外部办法的实现细节,但能够依据对象提供的内部接口 (对象名和参数) 拜访该对象。
作用
a)、实现了业余的分工。将能实现某一特定性能的代码封装成一个独立的实体后,各程序员能够在须要的时候调用,从而实现了业余的分工, 即工作中的分模块、分性能开发。
b)、暗藏信息,实现细节。通过管制拜访权限能够将能够将不想让客户端程序员看到的信息暗藏起来,如某客户的银行的明码须要窃密,只能对该客户开发权限。
javabean
规定
在编写 javabean 中的有一些罕用的规定如:
1)、属性尽可能私有化 private
2)、拜访器: setter 与 getter 拜访器 >private,个别 public 居多 setterXxx: 存储 > 与 getterXxx: 查看
代码
public class Person { // 姓名
private String name; // 年龄
private int age; // 性别
private boolean sex;
public Person() {}
//setter 与 getter
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public int getAge() {return age;}
public void setAge(int age) {this.age = age;}
public boolean isSex() {return sex;}
public void setSex(boolean sex) {this.sex = sex;}
}
经典 MVC 思维
概述
MVC 是一种分层思维,一种设计模式。
M:Model 层(模型层)
解决数据、业务,再把解决后的数据提供给视图层
V:View 层(视图层)
为用户展现数据,是数据最直观的体现。
C:Controller 层(业务逻辑层)
接管界面层的数据,对承受到的数据进行封装和类型转换。
调用模型层的服务进行业务逻辑的解决。
调用适合的视图去渲染数据。
长处
- 缩小代码量,晋升性能(效率);
- 进步代码的扩展性(需要改变,无需改变太多的代码)
- 遵循高内聚、低耦合的准则
[外链图片转存失败, 源站可能有防盗链机制, 倡议将图片保留下来间接上传(img-pZvJ4SlB-1609312950192)(/1581945749553.png)]
权限修饰符
public: 一览无遗;
protected: 子承父业 (儿子本人应用);
default : 家庭和睦;
private : 占为已有
面向对象 - 多态性
女朋友把我带到家,丈母娘一看,疯了!原来是像“曾志伟”!
概述
多态 polymorphism,次要是用来实现动静联编的,换句话说,就是程序的最终状态只有 在执行过程中才被决定而非在编译期间就决定了。这对于大型零碎来说能进步零碎的灵活性和扩展性。
java 中如何实现多态? 应用多态的益处?
援用变量的两种类型:• 编译时类型(含糊一点,个别是一个父类)
• 由申明时的类型决定。
• 运行时类型(运行时,具体是哪个子类就是哪个子类)
• 由理论对应的对象类型决定。
多态的存在要有 3 个必要条件:要有继承,要有办法重写,父类援用指向子类对象
代码
这里没有写
援用数据类型的类型转换
• 子类转换为父类:主动转换
上转型对象不能操作子类新增的成员变量和办法。
上转型对象能够操作子类继承或重写的成员变量和办法
如果子类重写了父类的某个办法,上转型对象调用该办法时,是调用的重写办法。
• 父类转换为子类:强制转换
(绝不是做手术,而是父类的真面目就是一个子类,否则会呈现类型转换谬误
抽象类
概述
应用了关键词 abstract 申明的类叫作”抽象类”。
抽象类是对形象的世界建模,是作为父类应用的。比方: 申请出一个图形的面积?这是你的思考到底是什么图形?这个图形太形象了?是三角形还是原型?图形怎么求面积?这个时候就能够把图形定义为抽象类。
几个要点
- 形象办法和抽象类均必须用 abstract 来润饰。
- 形象办法没有办法体,只须要申明不需实现。
- 有形象办法的类只能定义能抽象类。
- 相同抽象类外面的办法不肯定全是形象办法,也可能没有形象办法。
- 抽象类能够蕴含属性、办法、构造方法。
- 抽象类不能实例化,及不能用 new 来实例化抽象类,只能用来被子类调用。
- 抽象类只能用来继承。
- 形象办法必须被子类实现。抽象类的子类必须笼罩所有的形象办法能力被实例化,否则还是抽 象类。
代码
这里没有写
接口
概述
接口(interface), 比“抽象类”还“形象”的“抽象类”,能够更加标准的对子类进行束缚。全面地专 业地实现了:标准和具体实现的拆散
如何定义
• 格局:
• [拜访修饰符] interface 接口名 [extends 父接口 1,父接口 2…] {
• 常量定义 // 总是 public static final
• 办法定义 // 总是:public abstract •
}
如何实现
- 子类通过 implements 来实现接口中的标准
- 接口不能创立实例,然而可用于申明援用变量类型。
- 一个类实现了接口,必须实现接口中所有的办法,并且这些办法只能是 public 的。
- Java 的类只反对单继承,接口反对多继承
空接口
只是给 JVM 的一种标识而已, 就是 JVM 的通行证。
1)、java.lang.Cloneable : 不是所有的对象都能够被克隆 否则 CloneNotSupportedException
2)、java.io.Serializable
理论开发中,一个业务逻辑解决类永远不要去继承一个实现好的类,要么继承抽象类,要么实现接口,优先应用接口,防止单继承的局限 :abstract class 示意的是 ”is a” 关系,interface 示意的是 ”like a” 关系