Java面向对象三大基本特征:封装、继承、多态(超详细)

本文详细介绍了Java面向对象的三大特征:封装、继承和多态。封装涉及类、对象、信息隐藏及访问修饰符;继承解决代码复用,包括继承语法、方法覆盖和super关键字;多态则表现为运行时类型的不同导致方法调用的差异,以及多态语法和instanceOf运算符的应用。
摘要由CSDN通过智能技术生成

Java面向对象的三大基本特征


学习目标

熟练掌握三大基本特征的的概念与应用


一、学习步骤

1.封装

学习封装我们需要了解类和对象的概念
(1)、类

  • 类是拥有相同特性(状态)和行为(功能)的多个事物的抽象描述。
  • 类是用来描述群体的,是对群体的抽象描述。例如eacher类用于描述老师这个群体,张三是老师,李四是老师,王五也是老师。
  • 在程序中,类就可以作为一种新型的数据类型。可以使用类来声明变量

(2)、对象

  • 对象是类的一个具体实例,它用于描述一个具体的个体。
  • 对象一定属于某一类,具备该类的特征和行为。例如张三老师必须具备老师这个类的特征,老师有教学生的行为,那么张三是老师,当然也会教学生
  • 对象是独立的,唯一的个体。

(3)、封装

  • 封装的定义:
    把对象的字段和方法存放在一个独立的模块中(类)
    信息隐藏,尽可能隐藏对象的数据和功能的实现细节
  • 封装的好处:
    保证数据的安全性,防止调用者随意修改数据
    提高组件的重用性,把公用功能放到一个类中,谁需要该功能,直接调用即可

(4)、访问修饰符
封装其实就是要让有些类看不到另外一些类中定义的字段和方法。Java提供了不同的访问权限修饰符来限定类中的成员让谁可以访问到。
在这里插入图片描述

2.继承

继承可以解决代码复用问题,当多个类存在相同的属性和方法时,可以从这些类中提取出共同的属性和方法给父类,然后我们的子类就可以省去这些共同的属性和方法,只需要通过extends语句来声明继承即可

例子:

老师:拥有名字、年龄、级别三个状态,有授课和休息两个功能
学生:拥有名字、年龄、学号三个状态,有学习和休息两个功能
以上老师和学生都拥有名字和你年龄2个字段,都有休息的功能,我们可以吧共同的字段提取出来给父类来定义,把休息的功能也提取出来给父类,
然后老师和学生类就不需要定义这2个字段了,也可以不定义休息的方法了,只需要用extends去继承父类即可。

(1)、继承语法

public class 子类名 extends 父类名{
    }

注意Java中只支持单继承,但是支持多重继承。也就是说一个子类只能有一个直接的父类,父类也可以再有父类,Java中接口是支持多继承的


(2)、 子类能继承的父类成员
子类继承父类之后,可以拥有到父类的某一些成员(字段和方法),根据访问修饰符来判断:

  • 如果父类中的成员使用public和protected修饰,子类都能继承
  • 如果父类和子类在同一个包中,使用缺省访问修饰的成员,此时子类可以继承到
  • 如果父类中的成员使用private修饰,子类继承不到。private只能在本类中访问(这里引入一个拥有的概念,子类可以拥有父类的private修饰的方法,当时只能通过get和set方法访问)
  • 父类的构造器,子类也不能继承,因为构造器必须和当前的类名相同

    在这里插入图片描述

(3)、方法覆盖

  • 方法覆盖的定义:
    子类继承了父类,可以拥有父类的部分方法和成员变量。可是当父类的某个方法不适合子类本身时,我们就可以使用方法覆盖去重写父类的方法
    特征时
  • 方法覆盖的语法:
    首先子类得继承父类,当子类存在一个和父类一模一样的方法时,我们就称之为子类覆盖了父类的方法,也称之为重写。
  • 方法的调用顺序:
    通过对象调用方法时,先在子类中查找有没有对应的方法,若存在就执行子类的,若子类不存在就执行父类的,如果父类也没有,报错。
  • 方法覆盖的细节:
    1> private修饰的方法不能被子类所继承,也就不存在覆盖的概念。
    2> 实例方法签名必须相同 (方法签名= 方法名 + 方法的参数列表)
    3> 子类方法的返回值类型是和父类方法的返回类型相同或者是其子类
    子类方法的访问权限比父类方法访问权限更大或相等
    4> 如果父类方法是private,子类方法不能重写。==> 重写建立在继承的基础上,没有继承,就不能重写。
    5> 子类方法中声明抛出的异常小于或等于父类方法声明抛出异常类型

上述的方法覆盖细节真多,记不住,那么记住下面这句话就万事OK了。
精华:直接把你要重写的方法复制粘贴到子类中,然后重新编写子类方法体就好了!


(4)、super关键字
在子类中的某一个方法中需要去调用父类中被覆盖的方法,此时得使用super关键字。

子类方法名() {
   
	
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值