Java三大特性(封装、继承、多态)

我们都知道Java是面向对象的语言,有三大特征:封装、继承(extends)、多态。这三大特征分别是什么含义?又有什么规则呢?为什么要这样设计?

封装

隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。

规则
  • 将对象的属性和实现细节隐藏,不允许外界直接访问(用private修饰)
  • 将方法暴露出来,外界通过调用方法来操作、访问成员变量(例如最常用的getter、setter方法)

目的/优点

  • 隐藏实现细节
  • 限制外部对成员变量的不合理访问
  • 有利于保护对象信息的完整性
  • 便于修改,提高可维护性

可以举一个简单的例子:ATM会提供取钱、存钱的功能,我关心的就是取到钱或者卡上存上了钱,至于钱从哪里来、到哪里去都是银行关心的,对于客户而言并没有实际意义(可能某些不怀好意的人会关心吧…),这就是银行对于存钱、取钱流程的封装。

继承(extends)

一个类继承另一个类,则称继承的类为子类,被继承的类为父类。
继承就是类与类之间的关系,在网上看到一篇文章(JAVA基础——面向对象三大特性:封装、继承、多态),将这种关系称为“is a XXX”的关系,比如狗 is a animal。同时可以理解为父类为其子类共有属性所组成的类。猫、狗……所有的动物都有品种、体型等信息,我们就可以把这些信息抽离为animal类,所有的动物在实现时继承animal类,不需要重复写这些信息。

规则
  • 只能继承一个类(即一个类只允许有一个直接父类
  • 子类可以得到父类的全部成员变量、方法
  • 子类不能获得父类构造器,但可以使用
  • java.long.Object是所有类的父类(直接/间接)
  • B extends A,在创建B的实例时,系统会创建两块内存用来存放A和B的实例,B中可以使用super调用A类信息
  • B extends A,在B的构造方法中可以用super.A的方式调用A的构造器,但必须在第一行
  • B extends A,B构造器被调用时一定会显式/隐式调用A的构造器,且会逐级追溯到java.long.Object,且Object构造器首先执行
目的/优点
  • 提高代码重用率

多态

相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。

必要条件
  • 继承/实现:必须存在父子类/实现接口
  • 重写:子类对方法重写,调用时默认调用子类的实现
  • 向上转型:子类对象赋值给父类引用,系统自动完成向上转型
    eg:B extends A,A a = new B();
    A在编译时只能调用A中的方法,运行时调用B中的方法。
实现方式
  • 继承:B extends A,A a = new B();
  • 接口:B implements A,A a = new B();
  • 抽象类
主要表现
  • 重载:体现在本类之间的多态
  • 重写:体现在父子继承类、接口之间的多态
优点
  • 增强程序的可扩展性、可维护性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值