Java面向对象的三大特性学习总结

Java面向对象的三大特性学习总结


阅读目录
一、封装。
二、继承。
三、多态。

封装

  1. 封装的概念:即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
      简单来说,所谓封装就是将一个类的某些属性隐藏在该类的内部,只能通过该类提供的方法来实现对隐藏属性的访问和操作。用户无需知道内部的具体实现细节。
  2. 为什么要进行封装?
      封装是一种信息隐藏技术,在java中通过控制成员的访问权限实现封装,既使用方法将类的数据隐藏起来,控制用户对类的访问和修改数据的程度。适当的封装可以让代码更容易理解和维护,也加强了代码的安全性。
  3. 封装的实现步骤:
修改属性的可见性>将访问权限修饰符更改为private
创建getter/setter方法,访问和修改私有属性
在getter/setter方法加入对属性的控制语句,控制用户修改

  对封装属性的访问和修改不一定非要用getter/setter方法,只是getter/setter方法比较标准化,在eclipse等工具中可以快速生成。
在这里插入图片描述

  1. 访问权限修饰符
    在这里插入图片描述
      ☆代表该修饰符修饰的类可以被该列顶部位置的类访问。

继承

  1. 继承的意义:Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
      继承在自然界可以代表为一种派生,比如动物类,不论是猴子类、老虎类、还是鹦鹉类、蛇类,我们都可以统称他们为动物,他们都继承自动物类。
    在这里插入图片描述

  2. 在java中,继承是面向对象编程的一块基石,是一种代码复用的方式。子类可以通过继承拥有父类的属性和方法。

  3. 声明方式:extends关键字
      class 子类 extends 父类
      class Cats extends Animal{

    }
    (注意:java中类的继承只能是单继承,一个类只能有一个父类。而接口可以继承多个接口,会在后续介绍)

  4. 继承的特性:

  • 子类拥有父类的所有属性和(构造方法不能被继承)方法(父类private所修饰的成员由于访问权限问题,会被子类继承,但不能访问)
  • 子类可以拥有自己的属性和方法,即对父类的拓展。
  • 子类可以通过自己的方式实现父类的方法。

无构造器的继承例子:
在这里插入图片描述
带有构造器的继承例子:
在这里插入图片描述

  1. super关键字:父类拥有构造器过后,子类的构造器运行时会默认调用父类的无参构造器,如果父类没有私有化无参的构造器或者没有无参的构造器,那么编译器将会报错,不过后者可以通过super(参数)来实现手动调用父类的有参构造器。
      初始化顺序:父类对象属性初始化---->父类对象构造方法---->子类对象属性初始化—>子类对象构造方法

父类私有构造器:
在这里插入图片描述

父类只有带参数的构造器:
在这里插入图片描述

  1. 方法的重写:也叫方法的覆盖
      在很多时候子类所继承的父类方法并不一定完全使用。假如Person类中有一个名为work()的方法,对于子类学生Students来说,work()的内容应该是学习,而对于子类伐木工FirewoodCutter来说,work()的内容就应该是伐木。
      针对不同的子类,虽然都是继承于同一个父类,但他们对于同一个方法的最终实现不尽相同,这个时候就要用到我们的方法的覆盖。当调用方法时会优先调用子类的方法。比如String类中就重写了Object类中的equals方法。
    方法覆盖的语法:
  • 方法名
  • 参数列表
  • 返回值类型

必须与父类的方法完全一致。且

  • 子类抛出的异常不能超过父类相应方法抛出的异常。
  • 子类的访问权限级别不能低于父类相应方法的访问权限级别。

重载和重写的区别:

方法重载:在同一个类中处理不同数据的多个相同方法名的多态手段。

方法重写:在继承体系中,子类中对父类已经存在的方法进行区别化的修改。

一个简单的例子:
在这里插入图片描述
(值得一提的是,在子类中可以用[super.父类方法名]来调用父类未被重载的方法)

  1. final关键字:使用final关键字做标识有“最终的”含义。
      被final修饰的类不能被继承,如String、Math类(关于final以后会详细解释,笔者不在此多做阐述)

多态

  1. 多态的定义:java中不同对象根据同一个消息作出不同的反应。
      Java的多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编译时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
      比方说按下 F1 键这个动作,如果当前在IE界面下弹出的浏览器的帮助文档;如果当前在 Word 下弹出的就是 office帮助;在 Windows 下弹出的就是 Windows 帮助和支持

  2. 多态的类型转换:

  子类完全可以替换父类,反之则不可以。也就是我们可以说一个男人是人,但是不能反过来说一个人就是男人。
人 person = new 男人()  是合理的
男人 person = new 人()  则不合理
在这里插入图片描述

  1. instanceof运算符:实参可能是形参的任意子孙类,某些时候需要在方法中明确究竟参数的运行期类型是什么,那么instanceof运算符提供了一种解决方法
      运算符instanceof用来判断对象是否属于某个类的实例,具体语法如下:
      该表达式为一个boolean表达式,如果对象的类型是后面提供的类或其子类,则返回true,反之返回false
    在这里插入图片描述

抽象类和接口等,笔者会在以后的博客中详细阐述。
感谢您的阅读,本文仅代表笔者学习java三大特性后的一点总结。有很多不够详细,一些应用没有涉及,请多包涵。如果有误欢迎指出。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值