JavaSE基础五:最通俗易懂的 Java 面向对象理解、面向对象三大特性概述(封装、继承、多态)

Java 中面向对象的理解

在理解面向对象之前,首先来理解对象的含义:

现实生活中,所有存在的事物都可以称为对象,像宇宙,星球,土地,大河,高山,绿树,秋风,落叶,石头,人都可以视为对象,我们所生存的环境,正是由无数对象拼凑而成。

什么是面向对象:

面向对象是代码世界对现实世界中各个对象的模拟,由此在代码中产生了“万物皆对象”的思想,现实中的对象,我们使用代码将它抽象的表达出来。

面向对象编程:

使用代码,构造出各个对象,指挥这些对象完成需求。我们不再关注实现某需求的具体逻辑,只获取对象返回的结果即可。这将我们从执行者这一角色转换成了指挥者,将复杂的事情简单化。

面向对象的三大特性

在了解对象的三大特征之前,我们需要理解 Java 中的类和对象这两个概念。

类:具有相同属性和行为的事物的集合,是创建对象的模板。

对象:某类的一个具体实现。

1、封装

将有关的属性和行为组成一个类,就叫封装。一般将属性私有化,行为公开化,提高数据的隐秘性,让代码模块化。

封装的好处:将变化隔离、便于使用、提高代码的复用性、提高代码的安全性。

封装的原则:将不需要对外提供的内容都隐藏起来。

                      把属性隐藏起来,提供对其访问的公共方法。

Java 中通过对类的成员变量设置访问权限,来实现信息隐藏。

private:使用 private 修饰的成员变量,只能被这个类访问。如果一个类的构造方法声明为 private,那其他类不能生成该类的一个实例。

default:不加任何的访问权限修饰,这个成员变量属于缺省的访问状态,可以被这个类和同一包中的类访问。

protect:使用 protect 修饰的成员变量,可以被这个类本身、它的子类(包括同一个包中和不同包中的子类)、同一个包中的类访问。

public:使用 public 修饰的成员变量,可以被所有类访问。

同一类中同一包中子类所有类
private
default
protected
public
2、继承

在已有类的基础上,构建新类。已有的类称为父类,新类称为子类,两者之间的关系称为继承,用 extends 关键字表示,格式为:子类 extends 父类 {……};

子类能调用父类中非 private 修饰的成员变量和方法,同时还可以添加新的成员变量和方法,扩充父类,甚至可以重写父类的方法,使其更表现子类特征。

继承的规则:Java 中父类可以拥有多个子类,但每个子类只能继承一个父类,称为“单继承”。

继承的好处:实现了代码的复用。

                      可以重写父类中的方法,即命名与父类同名的方法。

​                      子类能吸收父类的属性和行为,并能扩展新的能力。

Java 中通过 super 来实现对父类成员的访问,super 来引用当前对象的父类,有三种使用情况:

  • 访问父类中被隐藏的成员变量:super.variable

  • 调用父类中被重写的方法:super.method([paramlist],super());

  • 调用父类的构造方法:super([paramlist]);

super 和 this 的用法:
this 代表本类引用;super 代表父类引用。当子父类出现同名变量时,可以使用 super 区分,子类调用父类的构造方法时,可以用 super,在子类方法重写中,若想调用重写前的方法,可以使用 super.方法名() 获取。

注意:

1、子类不继承父类的构造方法,它只是调用(隐式或显式)。如果父类构造方法没有参数,则在子类的构造方法中不需要使用 super 关键字调用父类构造方法,系统会自动调用父类的无参构造,如果父类的构造方法带有参数,则子类必须在构造方法中显式地通过 super 关键字调用父类的构造方法并配以适当的参数列表。

2、方法重写时,子类方法的权限要大于等于父类方法的权限,静态的方法重写后也必须是静态的,父类中私有的方法不能被重写。

3、被 final 修饰的类是一个最终类,不能被重写;被 final 修饰的方法是一个最终方法,不能被重写;被 final 修饰的变量是一个常量,不能被再次赋值。

4、内部类只能访问被 final 修饰的局部变量。

3、多态

多态是对象多种表现形式的体现。它的作用就是解耦,解除父子类的耦合度。简单来说,多态就是父类引用(或接口)指向子类(或实现类)对象。

例如:子类 Cat 继承了 Animal 类,那么 Animal 就是 Cat 的父类。

Animal a = new Cat();       //定义了一个 Animal 类型的引用,指向了新建的 Cat 类型的对象。

由于 Cat 是继承自 Animal 的,所以 Animal 类型的引用可以指向 Cat 类型的对象,这样做的意义是:

子类是对父类的扩充,一般子类在功能上更强大,父类引用指向子类对象既可以使用子类的强大功能,又可以抽取父类的共性。

但是对于子类中新定义的成员和方法,父类是无法使用的。同时,父类中的一个方法只有在没被子类重写的情况下,才可以被父类引用调用,对于被子类重写过的方法,父类引用调用时,会调用子类重写的方法,这就是动态连接。

实现多态的方式有:重写、接口回调

重写

重写,也叫覆盖,是指子类重新定义父类方法,以求达到不同的作用。

注意:

1、重写方法的访问权限必须和原方法的访问权限完全匹配,才能达到重写效果。

2、重写方法的返回值必须和原方法的返回值一致。

3、重写方法必须抛出和原方法相同的异常。

4、被重写的方法不能是私有方法。

接口回调

接口回调描述的是一种现象:接口声明的变量指向它实现类的实例化对象,那么该接口声明的变量就可以调用接口中的抽象方法。

编译时方法行为表现为接口中的抽象方法,运行时方法行为表现为实现类中重写的方法的这种特征,即为多态。


小小爱意,不成敬意.

各位看官,后面几章会以代码详细讲述三大特性,我们下篇见 (∩_∩)~~

                                                                                                                                                                                  -Czx.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值