欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java之面向对象

程序员文章站 2022-07-12 13:09:47
...

面向对象的特征有什么?

如果,当人家问到你,这个问题时,我们可以先引申出类的概念因为对象是类的一个实例。
点击查看类的详情

后面再去引出面向对象的三大特征:

  • 封装
  • 继承
  • 多态

封装是什么?

封装是面向对象语言的精髓。

简单来讲封装就是,把一些属性和方法封装起来,形成一个实体类(JavaBean)或者一个接口(Interface)【可以是方法接口】。

类的属性,一般是私有的。
类的方法,该公开的公开,该私有的私有。
方法,封装了实现的过程,接口是参数和返回值。

举例:1)get/set 方法;对某一个属性只提供get不提供set方法,就是只读的,在类的外部不能修改;2)提供统一的参数检查,在set上给与检查,判断合法性和安全性;将属性都私有,并且提供set/get 方法,做成了通用的组件,叫JavaBean;

eg:  猫具有如下特性:  可爱,高冷,活泼爱动  那么,我们可以将其封装成一个实体类Cat

public class Cat {
    private String id;
    private String lovely;
    private String lively;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getLovely() {
        return lovely;
    }

    public void setLovely(String lovely) {
        this.lovely = lovely;
    }

    public String getLively() {
        return lively;
    }

    public void setLively(String lively) {
        this.lively = lively;
    }
}

那么,接口,方法实例来一个。单纯表示一个接口方法,至于里面的实现类并不打算完善

修改:
@RequestMapping("/")   //里面是路径  url
Integer addOrEdit(@RequestParam("id") String id);//此注解,表示,拿到url上的属性值

继承

面向对象的主要功能

继承是一种构建新类的方式,他是基于已有的类的定义为基础,构建新的类,已有的类称为父类,新构建的类称为子类,子类能调用父类的非private修饰的成员,同时还可以自己添加一些新的成员,扩充父类,甚至重写父类已有的方法,更其表现符合子类的特征。让子类的表现更独特,更专业。

注意: 子类不能获得父类中使用privade修饰的成员。以及不可获得父类的构造器。

打个比喻的话~~那就是,你可以从你父亲那边继承得到金钱或其它。但你决不能获得你父亲的身体 咳咳咳。

多态

从一定角度来看的话,上面的封装以及继承都是为了多态而准备的。

多态可分为两种:

  • 编译时的多态:其实就是方法的重载。
  • 运行时的多态:Java运行时,系统根据调用该方法的实例的类型来决定,选择调用哪个方法。 (其实,我们平时所说的多态大部分便是运行时的多态)

注意:

因为说了,封装以及继承从一定角度来看,就是为了多态而准备的。

  • 一定存在继承关系。
  • 对父类的方法进行了重写。(重写是必须存在继承的,所以有第一点)。
  • 调用方法的时候,形参为父类调用。

点击此处,查看重载(Overload)以及重写(Override)

说了这么多,那么,多态到底是什么呢?

简单来讲,多态是同一个行为具有多个不同表现形式或形态的能力。多态性是对象多种表现形式的体现。
eg:我们在WPS编辑文档时,F12是保存文档,但是对于开发人员来讲在浏览器中F12就是开发工具了,尤其是前端开发人员。可,查看网络请求,审查元素等等。

抽象

除上之外,抽象也是一个重要的特征,抽象就是忽略与当前目标无关的相关方面,以便更充分地突出与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

多态的实现机制是什么?

Java允许父类或接口定义的引用变量指向子类或具体实现类的实例对象,而程序调用的方法在运行时才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
正是由于这种机制,两个相同类型的变量,但由于它们实际引用了不同的方法,所以结果也不同

嘻嘻嘻~是不是有点晕? 表示博主真正的去读的时候也是这样,脑壳痛脑壳痛~~
OK,举个简单的例子:
Java之面向对象
就是说,可能多个实例,调用同一方法,那么,它是怎么知道该调用那个方法呢?
很简单,是通过具体的实例调用的,而不是引用变量类型中的定义的方法来运行(如上图例子:调用Chinese c = new Chinese(); c.eat(); 执行出结果是用筷子吃饭。【不是根据引用变量类型中的定义的方法运行,是指不是看左边的 Chinese c 的引用变量,而是看右边的具体事例去调用方法,如果把右边的换成new Indian() ;那么调用eat();方法运行的结果又是不同 】
)。【所谓引用变量(如: China C = new China 引用变量是C 而 引用变量类型是China)】

看完之后,是不是有点理解了~~~机智如你,对吧

最后,来个多态例子:

Java之面向对象
Java之面向对象

结果
Java之面向对象