面向对象编程具有三大特征:

封装

继承

多态

一、封装

1、好处

狭义的封装:也就是属性的封装,避免了任意赋值的危险,提高了数据的安全性
  ①隐藏一个类中不需要对外提供的实现细节
  ②使用者只能通过实现定制好的方法来访问数据,可以方便的加入控制逻辑,限制对属性的不合理操作
  ③便于修改,增强代码的可维护性

2、具体实现步骤 ★

①属性私有化(private)
②提供公共的(public)方法:set方法和get方法

示例:
class Person{
  private String name;
  public void setName(String name){
    this.name = name;
  }
  public String getName(){
    return name;
  }
}

3、注意

一般来讲,建议所有属性进行封装。当然如果希望将属性设置成只读的,则可以仅仅提供get方法,如果是只写的,则可以仅仅提供set方法

二、继承

1、概念

一个类没有定义成员,则具备了另一个类的成员,这种现象称为继承
被继承的类称为父类或超类或基类
继承其他类的类称为子类或派生类

2、好处

①提高代码的重用性
②提高代码的维护性和扩展性

3、语法

class 类名 extends 父类类名{}

4、特点★

①子类继承了父类的所有属性和方法,包含私有的,只是访问时先遵循成员的访问权限,当然也可以通过公共的方法去访问
②子类没有继承父类的构造器
③java支持的是单继承,也就是extends后面只能有一个类名
④不能滥用继承。子类和父类必须满足 is-a的关系
⑤java中所有类都直接或间接继承了Object类
⑥类的成员的继承不限于直接父类

5、子类调用父类构造器 ★

①子类不能继承父类的构造器
②子类必须调用父类的构造器,目的是为了初始化父类的信息
③如果子类没有显式调用父类的构造器,则系统将默认调用父类的无参构造器
④如果父类没有无参构造器,则子类必须显式调用父类的有参构造器,否则报错!
  语法:super(参数列表)
⑤构造器的调用,不限于直接父类,将一直往上追溯直到Object类

三、多态

1、理解

概念:一种事物有多种表现形态,前面的封装和继承都是为多态打基础的
好处:
  ①提高代码的重用性和扩展性
  ②不需要关心每个元素的实际类型,只需要知道它的通用类型,调用比较方便,扩展性更高

2、体现 ★

①方法的重载和重写 √
②对象的多态性(对象的向上转型) ★
  注意:对于一个对象来讲,编译类型和运行类型出现了不一致,这种现象称为:多态
  编译类型=左边的类型,由编译器检测的类型
  运行类型=右边的类型,由解释器检测的类型
相关概念:
本态调用:Person p = new Person();
多态调用:Person p = new Student();
正常方法调用:Student s = new Student(); s.say();
虚拟方法调用:Person p = new Student();p.say();

3、对象转型 ★

(1)向上转型

语法:父类类型 引用名 = new 子类类型();
理解:父类的引用指向了子类对象
特点:
  ①编译看左边,运行看右边
    能调用哪些成员,要看编译类型中定义了哪些成员
    运行效果,要看运行类型中的方法执行
  ②属性没有重写或多态之说

(2)向下转型

语法:子类类型 引用名 = (子类类型)父类 的引用;
特点:
  ①不能强转父类的对象,只能强转父类的引用
  ②强转的父类的引用,必须指向的是该目标子类的对象
  ③可以调用从父类继承来的以及子类本身定义的所有成员

4、多态的应用

(1)多态数组

理解:数组的定义类型为父类类型,元素可以为子类类型

(2)多态参数

理解:方法的形参类型为父类类型,实参可以为子类类型
instanceof:用于判断某对象的运行类型是否是右边的类型XX或XX的子类型
  写法:a instanceOf XX
  结果:true|false
应用场景:一般放在if条件中用作判断

JavaSE基础知识(5)—面向对象(5.4面向对象三大特征:封装、继承、多态)的更多相关文章

  1. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  2. Java基础——面向对象(封装——继承——多态 )

    对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...

  3. Java面向对象设计主要有三大特征:封装性、继承性和多态性

    Java面向对象设计主要有三大特征:封装性.继承性和多态性 一  封装性   1.1  概念:它是将类的一些敏感信息隐藏在类的类部,不让外界直接访问到,但是可以通过getter/setter方法间接访 ...

  4. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

  5. php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

    1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...

  6. 封装继承多态-java面向对象三大特征

    第七章  封装和继承 一.面向对象的三大特征 封装.继承.多态 二.封装 将类的属性(字段)设置为私有的(private),并添加getter/setter方法操作属性. 注意:get|set方法的固 ...

  7. Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

    Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ​ 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...

  8. python面向对象(封装,继承,多态)

    python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...

  9. JavaSE基础知识总结

    最近回顾了一下Java的基础知识,决定写成博客梳理一遍,主要是JavaSE部分最基础的知识,适合考前突击,学后回顾,不适合作为初学材料. 简单的列个目录吧: 一.数据类型和运算符 二.流程控制与数组 ...

随机推荐

  1. 傻瓜学编程之block_1

    1.引出 1.1.int pp = 3;for循环为dd赋值并 调用 finprint(int ,int)函数 获取pp*dd的乘积,输出 void finalValue(int d, int sca ...

  2. New Journey--工作五年所思所感小记

    正式参加工作满五年了,2013年7月9日走入游戏行业.之前就计划着应该提笔写点什么留下来,但当日子真的到了,竟是不知说些什么了.14年年中的时候我曾写过一篇工作一年的总结,现在回头读起来,还真是别有一 ...

  3. 正确的学python方式

    首先呢,和其他的各种学习都一样,你一定要明白你学习的目标是什么.有的人想要通过学习Python,转行成程序员,实现行业上的转变:有的人希望通过学习Python,在现有的岗位上提升自己:当然也有很多人只 ...

  4. 常见cmd命令,开发人员必备

    运行程序 notepad--------打开记事本 calc-----------启动计算器 regedit.exe-------注册表 write----------写字板 mmc--------- ...

  5. jenkins持续集成部署

    用到的技术和工具:git + maven + jdk + jenkins,首先服务器安装git.maven.jdk,这些都不再赘述. 1:开始安装主角jenkins,首先去官网下载war包(https ...

  6. ef err

    InvalidCastException: The field of type jcz.DomainModels.Sex must be a string, array or ICollection ...

  7. Centos7.3 编译安装GDAL以及Python的GDAL包

    参考: https://cryolite.iteye.com/blog/176382 https://blog.csdn.net/a13326021319/article/details/782505 ...

  8. Go 语言 map (映射)

    1.Go 语言中 map 的定义及初始化: map[Key_Type]Value_Type scence := make(map[string]int) 2.Go 语言的遍历: scene := ma ...

  9. django APPEND_SLASH

    #设置项是否开启URL访问地址后面不为/跳转至带有/的路径APPEND_SLASH=True

  10. drf框架使用之 路飞学城(第一天)

    1. 路飞学城第一天: 知识点 使用的是序列化与反序列化的使用: 1.创建一个公共相应的Json方法: #创建一个公共响应的类: class LuffyResponse(): def __init__ ...