09 Java面向对象三大特征(概述)

简介: 09 Java面向对象三大特征(概述)

面向对象三大特征:封装、继承、多态

本篇为概念概述板块

详细知识框架梳理和实例明天更

9.1 引言

面向对象三大特性:封装、继承、多态。

9.2 封装
9.2.1 封装的必要性
  • 在对象的外部,为对象的属性赋值,可能存在非法数据的录入。
  • 就目前的技术而言,并没有办法对属性的赋值加以控制。
9.2.2 什么是封装

概念:尽可能隐藏对象的内部实现细节,控制对象的修改及访问的权限。

访问修饰符:private (可将属性修饰为私有,仅本类可见)

9.2.3 公共访问方法

以访问方法的形式,进而完成赋值与取值操作。

问题:依旧没有解决到非法数据录入!

  • 提供公共访问方法,以保证数据的正常录入。
  • 命名规范:
  • 赋值:setXXX() //使用方法参数实现赋值
  • 取值:getXXX() //使用方法返回值实现取值
9.2.4 过滤有效数据

在公共的访问方法内部,添加逻辑判断,进而过滤掉非法数据,以保证数据安全

9.2.5 JavaBean 设计

类:实体类 JavaBean。

JavaBean 分为两种:1、数据承载Bean 2、业务逻辑Bean

数据承载Bean的要求

  • 1、私有化属性
  • 2、对外提供公共的set、get方法
  • 3、提供有参无参构造
9.3 继承
9.3.1 生活中的继承
  • 生活中的“继承”是施方的一种赠与,受方的一种获得。
  • 将一方所拥有的东西给予另一方。
9.3.2 程序中的继承
  • 程序中的继承,是类与类之间特征和行为的一种赠与或获得。
  • 两个类之间的继承关系,必须满足“is a”的关系。
9.3.3 父类的选择
  • 现实生活中,很多类别之间都存在着继承关系,都满足“is a”的关系。
  • 狗是一种动物、狗是一种生物、狗是一种物质。
  • 多个类别都可作为“狗”的父类,需要从中选择出最适合的父类。
  • 功能越精细,重合点越多,越接近直接父类。
  • 功能越粗略,重合点越少,越接近Object类。(万物皆对象的概念)
9.3.4 父类的抽象

实战:可根据程序需要使用到的多个具体类,进行共性抽取,进而定义父类。

在一组相同或类似的类中,抽取出共性的特征和行为,定义在父类中,实现重用。

9.3.5 继承

继承概念:类与类之间属性和方法的赠与和获得

继承作用:减少代码的冗余,提高代码的复用性。

继承语法:子类 extends 父类

9.3.6 继承的特点
  • 1、子类继承父类,可以继承父类中的属性和方法
  • 2、子类可以拥有自己独有的属性和方法
  • 3、单继承,即在java中一个子类只能继承一个父类。但是一个父类可以拥有多个子类

4、多重继承,即一个父类还可以继承另外一个类。java中最大的父类的是Object(如果一个没有显示的写出extends 父类,默认就是Object子类)

9.3.7 不可继承
  • 1、构造方法不能被继承
  • 2、父类的私有属性不能被继承
  • 3、父类中使用默认的修饰符的修饰的属性和方法在不同包的子类中不能被继承
9.4 访问修饰符
9.4.1 访问修饰符

private私有的 default缺省的、默认的、友好的 protected 受保护的 public 公开的

修饰符 本类 本包(不同类) 不同包子类 其他
private
默认的
protected
public
9.5 方法重写
9.5.1 方法的重写/覆盖

子类中有与父类相同签名的方法称之为方法重写

重写的特点:

  • 相同签名 :方法名相同、参数相同、返回值相同、子类访问修饰符要比父类更宽泛
  • 相同签名 :方法名相同、参数相同、返回值相同、子类访问修饰符要比父类更宽泛

重写的作用:

  • 因为父类的方法无法满足子类的需求,所以需要重写父类的方法

注解:@Override 建议在重写方法的时候,加上注解

  • 检测是否是满足方法重写。必须满足重写的要求,否则报错

注意:不能被继承的方法就不能被重写

9.6 super关键字
9.6.1 super关键字

含义:直接父类的对象

作用:可以调用父类的属性、方法、构造方法

调用父类属性和方法的时候:

  • 1、当子类与父类有重名属性和重名方法的时候,this.属性、this.方法名表示调用子类的属性和方法
  • 2、当子类与父类有重名属性和重名方法的时候,super.属性、super.方法名表示调用父类的属性和方法
  • 3、如果没有重名属性和方法,那么this和super表示的都是父类的属性和方法(子类继承而来)
  • 调用父类的构造方法的时候:
  • 注意:创建子类对象之前,必须要先创建父类的对象
  • 1、super();调用的是父类的无参构造。是可以完全省略的,省不省略都会执行(建议:保留父类的无参构造)
  • 2、 super调用父类的有参构造,要放到构造方法第一行。super和this不能同时出现

9.6.2 子类对象的创建过程

对象的创建过程:


1、开辟空间

2、实例化成员变量

3、执行构造方法

4、将创建的对象赋给对象名

继承后对象的创建过程


先创建其父类的对象,实例化父类的成员变量,执行父类的构造方法,

在创建子类的对象 ,实例化子类的成员变量,执行子类的构造方法

9.7 多态
9.7.1 生活中的人物视角

生活中,不同人物角色看待同一个对象的视角不同,关注点也不相同。

9.7.2 生活中的多态

生活中的多态是指“客观事物在人脑中的主观反应”。

主观意识上的类别与客观存在的对象具有“is a”关系时,即形成多态。

9.7.3 程序中的多态

概念:父类引用指向子类对象,从而产生多种形态。

二者具有直接或间接的继承关系时,父类引用可指向子类对象,即形成多态。

父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法。

9.7.4 多态的特点
  • a、如果发生多态,那么调用的一定是子类重写的方法。
  • b、如果发生多态,那么无法调用子类自己独有方法和属性。

编译看左边,运行看右边

9.7.5 多态的产生条件
  • a、必须要有继承关系
  • b、必须要有方法重写
  • c、必须要有父类的引用指向子类的对象
9.7.6 向上转型和向下转型

如果发生多态要调用子类自己独有的方法和属性,那么需要发生向下转型。

但是发生向下转型之前必须要发生过向上转型

Pet pet = new Dog(); //向上转型
Dog d = (Dog)pet; //向下转型
9.7.7 instanceOf关键字
  • 语法: 对象名 instanceof 类型
  • 作用:判断该对象是否属于该类型。属于返回true,否则返回false
  • 应用场景:在向下转型之前,最好先做一个判断。以免发生类型转换异常的错误
9.7.8 多态的应用场景
  • 将参数改为父类类型,使用更加等宽泛和灵活
  • 将返回值类型改为父类类型,更将灵活

目录
相关文章
|
1天前
|
安全 Java Go
面向对象程序设计语言:Java
Java语言语法和C语言和C++语言很接近,很容易学习和使用,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的特性,Java语言不使用指针,而是引用,并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧
11 2
|
5天前
|
安全 Java API
Java 18 概述:新特性一览
Java 18 作为 Java 平台的最新版本,引入了多项令人振奋的新特性和改进,包括模式匹配、记录类型、流库改进、外部函数与内存 API 以及并发处理增强。这些新功能不仅提升了开发者的生产力,还显著增强了 Java 的性能和安全性。本文将详细介绍 Java 18 的主要新特性,并通过代码示例帮助读者更好地理解和应用这些功能。
|
25天前
|
Java 数据处理 开发者
【Java基础面试十二】、说一说你对面向对象的理解
这篇文章阐述了面向对象是一种以类和对象为基础,通过封装、继承和多态等概念来模拟现实世界中的事物及其相互关系的程序设计方法,它强调以事物为中心进行思考和系统构造,与结构化程序设计相比,更符合人类的自然思维方式。
【Java基础面试十二】、说一说你对面向对象的理解
|
25天前
|
Java
【Java基础面试十三】、面向对象的三大特征是什么?
这篇文章介绍了面向对象程序设计的三大基本特征:封装、继承和多态,其中封装隐藏对象实现细节,继承实现软件复用,多态允许子类对象表现出不同的行为特征。
【Java基础面试十三】、面向对象的三大特征是什么?
|
21天前
|
Java 开发者 C++
|
24天前
|
存储 Java
Java面向对象面试题总结(上)
在Java中,重写(Override)与重载(Overload)是两个重要的概念,关联到方法的定义与调用。重写是指子类对继承自父类的方法进行新的实现,以便提供子类特有的行为,其关键在于方法签名一致但方法体不同。重载则允许在同一个类中定义多个同名方法,只要参数列表不同即可,以此提供方法调用的灵活性。重写关注多态性,而重载强调编译时多态。
19 1
|
1月前
|
存储 算法 Oracle
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
55 8
|
14天前
|
存储 Java 数据库连接
Java编程之旅:从基础到高级,探索面向对象的力量
【8月更文挑战第31天】本文是一篇深入浅出的Java编程指南,旨在通过生动的例子和实际代码演示,带领读者从Java的基础语法起步,逐步深入到面向对象的核心概念,最后探讨如何在实际项目中应用这些知识。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的见解和实用的技巧。
|
24天前
|
Java 数据安全/隐私保护
【Java 第五篇章】面向对象
封装隐藏对象内部细节,仅暴露出必要的接口,提升代码的安全性和可维护性。通过private修饰属性并提供公有的getter和setter方法实现。权限修饰符从private到public控制着访问范围,从类内到整个项目。封装可用于类及其内部结构。
13 0
|
1月前
|
存储 SQL 搜索推荐
一天十道Java面试题----第一天(面向对象-------》ArrayList和LinkedList)
这篇文章是关于Java面试的笔记,涵盖了面向对象、JDK/JRE/JVM的区别、`==`和`equals`、`final`关键字、`String`、`StringBuffer`和`StringBuilder`的区别、重载与重写、接口与抽象类、`List`与`Set`、`hashcode`与`equals`以及`ArrayList`和`LinkedList`的对比等十个主题。