浅谈面向对象

简单介绍面向对象

Java语言是一种面向对象OOP(Object Oriented Programming)还有OOD(面向对象的设计),OOA(面向对象的分析)的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,
这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。
面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。

三大特性五大原则

什么是类和对象?

:简单来说类是对像是世界中事务的抽象。
例如:Student类
Student类应当含有:name, age, gender… 等属性,像这样拥有相同点的事物抽象为一个类。
类中包括:

  • 所有对象所有共有的特征:属性(静态)。
  • 所有对象的所有共有的行为:方法(动态)

对象:简单来说就是现实中具体的个体。
例如:Student类中具体的对象Tom。

类是对象的模板,对象是类的具体实例。

一个类可以创建多个对象:同一个类的不同对象,结构相同,数据不同。

三大特性:

1.封装

在java中,封装就是把过程和数据包裹起来,对数据的访问只能通过已经定义的接口,面向对象计算始于这个基本概念,即现实世界已经被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象

当我们在一个类中定义成员变量时,会指定一个变量的类型,除此之外,还会有修饰符的部分,在此给出定义成员变量的规范格式:

  • [修饰符] 变量类型 变量名称;
  • [修饰符] 变量类型 变量名称 = 初始值;
  • 例如:private String name;

关于修饰符的权限:

这里是引用

2.继承

  • 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

  • 继承的作用:通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量。

举例:
父类:可以抽象为一个类,每个人有名字性别年龄等属性,人还可以进行一系列动作。
子类:学生 继承 这个类,每个学生有自己的 教室,可以进行 学习 动作。
子类:老师 继承 这个类,每个老师有自己的 薪资,可以进行 教学 动作。

下面用UML图介绍来了解下继承:

在这里插入图片描述
从图中可以很直观的看出子类和父类的关系,图中的关系为泛化,即Person类泛化为Student类和Teacher类。
而在Java编程中用extends来体现子类和父类的继承关系。(extends 原意为:拓展,伸张,即子类不仅可以和父类一样,还可以拥有自己独特的方面)

下面用Java语言来解释上面UML图中所展示的内容:

Person类:
在这里插入图片描述

Student类
在这里插入图片描述

Teacher类
在这里插入图片描述
这样,就体现了 学生教师 这个类的继承关系。(Object是所有类的父类)

3.多态

什么是多态?

多态就是:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象。

多态有什么作用?
  • 大大提高程序的可复用性。(继承)
  • 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。
概念看不懂?

下面我们举一个例子来进一步了解多态:
例如编写一个可以进行+ - * /的计算器:
在这里插入图片描述
如上图所示,我们可以这样编写计算器这个类,但是如果这么做,简单的代码维护起来虽然不难,但是如果代码复杂的情况维护起来就很费劲,所以,我们将代码进行改进,如下图所示(只以加减法为例):
Calculator类
在这里插入图片描述
Add类
在这里插入图片描述
Sub类
在这里插入图片描述
让我们对代码进行测试:
在这里插入图片描述

这里是引用

例子太简单?

那我们再来看看更简单的例子:
在这里插入图片描述
Shape类中有个draw()方法,通过多态可draw()出不同的形状:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进行测试:
在这里插入图片描述

这里是引用

方法重载 Overload

在同一个类中,允许存在一个以上的同名方法,只要他们的参数类型参数个数不同即可(与返回类型无关)
最典型的例子就是构造方法(无参构造和有参构造方法)。

  • 方法重载的特点:与返回值无关,只看参数列表。

重写(覆盖) @Override:

  • 方法名需要与父类一摸一样才可以进行重写
    最典型的例子就是toString()方法。
    在Object中toString()调用的方式是:
public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

大多时候我们是要对其进行重写以方便我们操作:

@Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }

接口 interface:

接口就是:

  • 接口是一个纯粹的抽象类(接口里面所有的方法都是抽象方法)。
  • 接口就是一个规范,他没有提供任何的具体实现,具体的功能由接口的子类去实现。
  • 接口是一个标准,一般用在能不能具有某个功能。
    举个简单的例子:灯泡在最早之前的接口是大小不一的,这就导致了不方便性。权威厂商在意识到问题后同其他大厂老板商讨,定制出一套规范作为通用灯泡。但是老板并不会自己执行,而是将规范法发配个各个厂,这样产品的规范就得到了保障。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值