• Java 面向对象编程的三大特性——封装、继承、多态


    一、类和对象

    1.

    首先,什么是对象呢?

    对象简单的来说就是一个实物,比如一部 iPhone X 手机,它就是对象。它的屏幕、内存等就是它的属性

    手机能够打电话,发短信,这个功能就是它的方法

    2.

    那,什么是类呢?

    类是对象的类型,它是具有相同属性和方法的一组对象的集合

    3.

    类和对象的关系:

    类是抽象的概念,比如:动物,手机(可以这样理解,都是某一种东西的统称)。

    而对象就是一个你能够看得见摸得着的实体,比如:猫,狗,iPhone X,华为Mate 20 等。

    二、面向对象三大特性之一 —— 封装

    1.

    现在知道了什么是对象和类,那面向对象的三大特性之一的封装又是什么呢?

    封装是面向对象的特征之一,是对象和类概念的主要特性。将类的某些信息隐藏在该类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

    2.

    知道了封装的概念,自然其好处也就一目了然了。

    • 只能通过规定的方法来访问数据
    • 隐藏类的实例细节,方便修改和实现

    谈到这里,不得不说 Java 中的几个访问修饰符了。访问修饰符是用来修饰属性和方法的访问范围,有如下几个:

    • private —— 只能是在本类中使用
    • <default> —— 不输入任何访问修饰符则是默认的条件下,即只能是在同包和本类中使用
    • protected —— 不仅仅在同包和本类中使用,还可以在其子类中使用(面向对象的另一特性  继承),子类换句话说是跟本类相关的类
    • public —— 则是在任何情况下都能使用

    3.

     我们在使用封装对象的属性的时候,经常会使用到 this 关键字,那这又是什么呢?

     this 关键字代表当前对象:

    • this.属性  操作当前对象的属性
    • this.方法  调用当前对象的方法

    三、面向对象三大特性之一 —— 继承

    1.

    继承是类与类的一种关系,如下图所示

    图中子类是狗,而父类则是动物,动物类可包含很多子类,比如狗,猫,斑马,鸟等子类。

    注意:Java 中的继承是单继承。也就是狗类(子类)的父类只有一个动物类。

    2.

    继承的好处:

    • 子类拥有父类的所有属性和修饰符注意:private 修饰的无效!
    • 代码复用。父类实现的功能,子类继承父类,那么子类就可以复用父类所写的代码

    3.

    有同学会问,如果我不满意父类中的方法,那咋整?

    其实我们是可以重写父类的方法!当调用方法时,会优先调用子类的方法

    当然这里需要注意的是重写时的语法规则

    • 返回值类型
    • 方法名
    • 参数类型及个数

    都必须要与父类的方法名相同,才能叫方法的重写!

    4.

    我们经常在使用继承的时候会用到 final 关键字,那它又是干嘛的呢?

    单从字面上的理解就是“最终的,最后的”。

    final 可以修饰类、方法、属性和变量。

    • 修饰类的时候,该类不可被继承
    • 修饰方法的时候,该方法不可被重写
    • 修饰属性的时候,该类的属性不会进行隐式的初始化(类的初始化必须有值)或在构造方法中赋值(只能选择其一
    • 修饰变量的时候,该变量只允许被赋值一次,即为常量

    5.

    继承中又一关键字 —— super

    其在对象的内部使用,可以代表父类对象。

    • 访问父类的属性:super.(父类的属性)
    • 访问父类的方法:super.(父类的方法)

    四、面向对象三大特性之一 —— 多态

    1.

    对象的多种形态:

    • 引用多态
      • 父类的引用可以指向本类的对象
      • 父类的引用可以指向子类的对象(子类不能指向父类!
    • 方法多态
      • 创建本类对象时,调用的方法为本类方法
      • 创建子类对象时,调用的方法为子类重写的方法或者继承的方法

    2.

    多态中引用类型的转换:

    • 向上类型转换(隐式/自动类型转换),是小类型到大类型的转换
    • 向下类型转换(强制类型转换),是大类型到小类型的转换
    • instanceof 运算符,可以来解决引用对象的类型,避免类型转换的安全性问题

    如下图所示,茶杯向茶壶里倒水是无风险的,而壶向杯子倒水则是有风险的,容易溢出来。

    3. 

     Java 中的抽象类

    定义:抽象类前使用 abstract 关键字修饰,则该类为抽象类。

     应用场景:

    • 某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法
    • 从多个具有相同特征的类中抽象出一个抽象类,以这个类作为子类的模板,从而避免子类设计的随意性

    作用:限制规定子类必须实现某些方法,但不关注细节。

    使用规则

    • abstract 定义抽象类
    • abstract 定义抽象方法,只有声明,不需要实现
    • 包含抽象方法的类是抽象类
    • 抽象类中可以包含普通的方法,也可以没有抽象方法
    • 抽象类不能直接创建,可以定义引用变量

    4.

    接口

    概念:接口可意理解为一种特殊的类,有全局常量和公共的抽象方法所组成。

    或者可以这样理解

    类是一种具体实现体,而接口定义了某一批类所要遵守的规范,接口不关系这些类的内部数据,也不关心这些类方法的实现细节,他只规定这些类必须提供某些方法。

    注意点:

    • 接口不再使用 class 关键字,而是使用 interface 关键字
    • 前面提到的 Java 中类是单继承,但是接口可以多继承
    • 实现接口使用 implements 关键字

    一个材料人跨行到互联网的研究僧

    希望大家能多多关注~

    作者:意无尽 公众号:意无尽 关于作者:本人目前传统专业,现自学 Java,后续会有向大数据方向转型。希望自己能一步一个脚印的走下去,以此博客来见证我技术的成长轨迹!
  • 相关阅读:
    [No0000139]轻量级文本编辑器,Notepad最佳替代品:Notepad++
    [No0000138]软件开发基础知识
    [No0000137]字符编码详解
    [No0000144]深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing)理解堆与栈1/4
    [No0000136]6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
    [No0000135]程序员修炼之道 Tips
    phpstorm 调试时浏览器显示The requested resource / was not found on this server
    php注解
    phpStorm 配置PHP_CodeSniffer自动检查代码
    php
  • 原文地址:https://www.cnblogs.com/reformdai/p/10604027.html
Copyright © 2020-2023  润新知