目录

面向对象与面向过程的区别

问题 :面向过程性为什么比面向对象高??

面向对象的三大特性

封装

继承

相反,public可以

补充:关于Object类

注意

super详解

方法的重写

多态

多态的特点


面向对象与面向过程的区别

  • 面向过程:面向过程性能比面向对象的性能高。但是由于类的实例化需要消耗大量的资源。所以一些需要高性能的,如:单片机、嵌入式开发等一般都采用面向过程。但是面向过程没有面向对象那样易扩展,易修复,易维护。

  • 面向对象:面向对象有着高内聚,低耦合(自行百度,我这里就不做阐述),面向对象的封装、继承、多态性可以设计出低耦合的系统,更容易维护。但是面向对象性能比面向过程低。

问题 :面向过程性为什么比面向对象高??

参考链接:

为什么面向对象性能低

 面向过程 :面向过程性能比面向对象高。 因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发。
 ​
 ---->>
 这个并不是根本原因,面向过程也需要分配内存,计算内存偏移量,Java性能差的主要原因并不是因为它是面向对象语言,而是Java是半编译语言,最终的执行代码并不是可以直接被CPU执行的二进制机械码。
 ​
 而面向过程语言大多都是直接编译成机械码在电脑上执行,并且其它一些面向过程的脚本语言性能也并不一定比Java好。

面向对象的三大特性

封装

  • 封装就是把一个对象的状态信息(属性)给隐藏起来,不允许外部访问

这时候用private修饰,再访问编辑器就会报错

public 与 private

封装即为用private将属性私有化,外部无法调用如:

继承

  • 继承是父类与子类的关系,extends的意思是“扩展”。子类会继承所有属性父类的扩展

  • 子类会继承父亲所有的公开属性

输出结果

xiaoming就是一个son,他会继承他爹留下的100001元

issue : private 修饰的属性 son 还能 继承吗?

答案是当然不行了,private关键词将属性私有,小明无权获得

相反,public可以

补充:关于Object类

Object 类是一个特殊的类,是所有类的父类。它主要提供了以下 11 个方法:

 public final native Class<?> getClass()//native方法,用于返回当前运行时对象的Class对象,使用了final关键字修饰,故不允许子类重写。
 ​
 public native int hashCode() //native方法,用于返回对象的哈希码,主要使用在哈希表中,比如JDK中的HashMap。
 public boolean equals(Object obj)//用于比较2个对象的内存地址是否相等,String类对该方法进行了重写用户比较字符串的值是否相等。
 ​
 protected native Object clone() throws CloneNotSupportedException//naitive方法,用于创建并返回当前对象的一份拷贝。一般情况下,对于任何对象 x,表达式 x.clone() != x 为true,x.clone().getClass() == x.getClass() 为true。Object本身没有实现Cloneable接口,所以不重写clone方法并且进行调用的话会发生CloneNotSupportedException异常。
 ​
 public String toString()//返回类的名字@实例的哈希码的16进制的字符串。建议Object所有的子类都重写这个方法。
 ​
 public final native void notify()//native方法,并且不能重写。唤醒一个在此对象监视器上等待的线程(监视器相当于就是锁的概念)。如果有多个线程在等待只会任意唤醒一个。
 ​
 public final native void notifyAll()//native方法,并且不能重写。跟notify一样,唯一的区别就是会唤醒在此对象监视器上等待的所有线程,而不是一个线程。
 ​
 public final native void wait(long timeout) throws InterruptedException//native方法,并且不能重写。暂停线程的执行。注意:sleep方法没有释放锁,而wait方法释放了锁 。timeout是等待时间。
 ​
 public final void wait(long timeout, int nanos) throws InterruptedException//多了nanos参数,这个参数表示额外时间(以毫微秒为单位,范围是 0-999999)。 所以超时的时间还需要加上nanos毫秒。
 ​
 public final void wait() throws InterruptedException//跟之前的2个wait方法一样,只不过该方法一直等待,没有超时时间这个概念

注意

  • 一个儿子只能有一个爹,一个爹却能有多个儿子

super详解

  • 子类通过super来访问父类的属性

 我们可以看见this关键词还是访问的是自己的print(),而super关键词访问的是父类print函数

不写任何默认访问自身

方法的重写

  • 重写是对方法来说的,与属性无关

  • 重写对于public来说的

  • 重写前提是得有继承关系,且子类重写父类的方法

(关于重写和重载以后细说)

子类的方法将父类的方法重写

多态

多态,顾名思义,表示一个对象具有多种的状态。具体表现为父类的引用指向子类的实例。

多态的特点

  1. 多态是方法的多态,属性没有多态

  2. 多态不能调用只在子类不在父类的方法(大人不用小孩子的方法解决问题)

  3. 如果子类重写了父类的方法,真正执行的是子类覆盖的方法,如果子类没有覆盖父类的方法,执行的是父类的方法。

  4. 将之转换是从高位到低位来讲的

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐