OOP的四大特征
抽象 abstract
最近对抽象有些不熟悉,那么先谈谈抽象。 抽象在java中常常表现为抽象类和抽象方法,即被abstract关键字修饰的类和方法。
抽象类:被abstract修饰的类
1 和接口不同,抽象类中可以有非抽象的方法,也可以有抽象的方法,而接口中只允许有抽象方法
2 如果一个抽象类被一个非抽象的子类继承,那么父类的抽象方法就必须被子类重写(附:重写发生在父类与子类,形参列表相同。重载发生在同一个类里面,形参列表不同)。
3 抽象类不能创建本身的实例,但是可以利用多态,使父类(抽象类)的引用指向子类的对象,创建子类的实例。
4 基于上一条件可以得知,抽象类不能用final修饰,抽象方法也是。
抽象方法:没什么好说的,没有方法体的方法,可以被非抽象子类重写。
封装:
一般用private修饰符修饰,将类的成员属性私有化,隐藏内部实现细节,仅对外提供公共的getset方法。封装的优点在于隐藏了代码实现细节,提高了安全性。
继承:
一般用extends修饰符表示类与类之间的继承关系。
java只支持单继承,即一个子类只能拥有一个父类。但是可以多实现。
子类可以继承父类的属性和方法,但是不能继承父类的私有化的属性以及构造方法。子类在实例化的时候会先调用父类的构造。
如果一个类没有父类,那么默认继承基类Object。
继承的优点和缺点:
提高了代码的复用性和重用性,是多态产生的前提。但是也增加了类与类之间的耦合性,违背软件开发高内聚、低耦合的原则。
多态:
多态的实现有三个条件:
有继承关系
有方法重写
有父类引用指向子类对象
多态的优点:
提高了程序的扩展性(基于此,多使用面向抽象编程)
降低了代码之间的耦合
OOP的四大特征的更多相关文章
- 面向对象编程(OOP)的五大特征-java学习之旅(1)
这是Alan Kay关于第一个成功的面向对象语言SmallTalk的总结: 1.所有的东西都是对象.可将对象想象成一种新型的变量:它保存着数据,但是可要求它对自身进行操作,理论上讲,可从要解决的问题身 ...
- OOP面向对象 三大特征 继承封装多态
OOP面向对象 ----三大特征 继承封装多态 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构 ...
- AngularJS简介与四大特征
1.1 AngularJS简介 AngularJS 诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.A ...
- Java学习日记基础(五)——类、对象之this、静态变量(类变量)、静态方法(类方法)、四大特征
this 赵本山问奥尼尔:“我的爸爸的爸爸是谁?” 奥尼尔:“不知道” 赵本山:“你傻啊,是我爷爷” 奥尼尔回去问科比:“我的爸爸的爸爸是谁?” 科比:“不知道” 奥尼尔:”你傻啊,是赵本山的爷爷“ ...
- AngularJS四大特征
AngularJS四大特征 1.MVC模式 Angular遵循软件工程的MVC模式,并鼓励展现,数据,和逻辑组件之间的松耦合.通过依赖注入(dependency injection),Angular为 ...
- Java基础学习(三) -- OOP的三大特征、向上和向下转型、内部类之详解
面向对象编程(OOP)的三大特征 什么是封装? (1) 把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的类中; (2) "信息隐藏", 把不需要让外界知道的信息隐藏起来 ...
- angularjs的四大特征
angularjs四大特性: 1.MVC模式: Model:数据,其实就是angular变量($scope.XX,$rootScope.XX); View:数据的呈现,Html+Directive(指 ...
- 事务四大特征:原子性,一致性,隔离性和持久性(ACID)
一.事务 定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位. 准备工作:为了说明事务的ACID原理,我们使用银行账户及资金管理的案例进行分析. [sql] ...
- http 四大特征
随机推荐
- Python socket day3
UDP聊天室 本地回环(127.0.0.1) 本地回环是每台电脑都有的,只能用于自身电脑的通讯,无论你的IP地址是多少,只要发送方输入的目的IP为127.0.0.1 ,自身便能接受得到数据 测试本地回 ...
- 消息队列(二)--- RocketMQ-NameServer阅读
概述 所有broker在启动的时候都会向NameServer进行注册,对它进行发送心跳包. 源码阅读 我们先从 NamesrvStartup这个类分析 public static void mai ...
- oracle 密码过期问题
密码过期问题: ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
- 【C语言】找出1000以内所有的素数
#include<stdio.h> int main() { int i, j, t; ; i <= ; i++) { ; ; j < i; j++) { ) { t = ; ...
- mysql带条件的计数
在网站开发的过程中,经常会用到数据统计功能,因此条件计数查询便是不可避免的,下面介绍几种方法来解决此问题. 例(假设): mysql> select * from count_demo; +-- ...
- LCT 维护边双 / 点双的模板
用 \(\text{LCT}\) 维护边双的做法是:加入一条非树边时,将这段树上路径合并为一个点代表这个边双,具体实现用并查集合并点,在 \(\text{Splay}\) 与 \(\text{Acce ...
- Django项目配置数据库时,已安装mysqlclient,却提示 Did you install mysqlclient错误,后右报错ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3
错误信息如下: 解决方案是: 找到自己的项目文件夹下的__init__.py 添加如下代码 解决这个问题后,右报错django2.2/mysql ImproperlyConfigured: mysq ...
- jdk rpm安装实现
wget https://download.oracle.com/otn/java/jdk/8u211-b12/478a62b7d4e34b78b671c754eaaf38ab/jdk-8u211 ...
- MySQL - Schema和Database的区别
问题来源 在pycharm发现Create new schema的效果和新建数据库一样,所以产生这个问题 参考 https://stackoverflow.com/questions/11618277 ...
- ln N! -> N(lnN -1)