美文网首页
继承、多态、组合

继承、多态、组合

作者: root_zhb | 来源:发表于2018-03-31 23:50 被阅读0次

一、简介

extends——“is-a”(是一个)的关系是用继承来表达的;

“has-a”(有一个)的关系是用组合来表达的。

“对外一个接口,内部多种实现”——多态(运行时多态和编译时多态(重载实现))

二、关于继承

子类到底继承了父类的哪些成员(根据访问修饰符来判断):

1):如果父类中的成员使用public修饰,子类继承.

2):如果父类中的成员使用protected修饰,子类也继承,即使父类和子类不在同一个包中.

3):如果父类和子类在同一个包中,此时子类可以继承父类中 缺省修饰符的成员.

4):如果父类中的成员使用private修饰,子类打死都继承不到.因为private只能在本类中访问.

5):父类的构造器,子类也不能继承,因为构造器必须和当前的类名相同.

三、细节问题

1、需求:在子类中的某一个方法中,去调用父类被覆盖的方法.

使用super关键字.    super: 当前对象的父类对象.

this: 当前对象,谁调用this所在的方法,this就是哪一个对象.    

2、子类构造中调用父类构造这句话  super([实参])  ,必须作为子类构造器的第一句话

四、Object

Object类的常见方法:

1): protected void finalize() :当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 垃圾回收器在回收某一个对象之前,会先调用该方法,做扫尾操作. 该方法我们不要去调用.

2): Class getClass() :返回当前对象的真实类型。

3): int hashCode(): 返回该对象的哈希码值,hashCode决定了对象再哈希表中的存储位置,不同对象的hashCode是不一样的.

4): boolean equals(Object obj) :拿当前对象(this)和参数obj做比较. 在Object类中的equals方法,本身和 “ == ”符号相同,都是比较对象的内存地址. 官方建议:每个类都应该覆盖equals方法,不要比较内存地址,而去比较我们关心的数据.,因为我们关系的是内容数据,而不是内存地址. 比如:两个学生对象,我们不管是如何new出来的,只要学号相同我就应该认为是同一个对象. 两个字符串,只要内容相同,我们就认为是同一个字符串.

5):String toString():表示把一个对象转换为字符串. 打印对象时,其实打印的就是对象的toString方法. System.out.println(obj对象);等价于 System.out.println(obj对象.toString()); 默认情况下打印对象,打印的是对象的十六进制的hashCode值,但是我们更关系对象中存储的数据. 官方建议我们:应该每个类都应该覆盖toString,返回我们关心的数据.

五、多态

多态的作用:把不同的子类对象都当作父类类型来看待,可以屏蔽不同子类对象之间的实现差异,从而写出通用的代码达到通用编程,以适应需求的不断变化。

即在运行时刻,根据变量指向的具体类型(父类or子类)确定调用的方法是在父类or子类中的实现。

运行时多态,晚联编实现

将一个方法调用和一个方法体连接在一起,就称为联编。

在程序运行之前执行联编操作,则成为早联编。在运行时刻执行联编就称为“晚联编”。

在晚联编中编译器不知道对象的类型,但在运行时刻的方法调用机制   能够自己确定并找到正确的方法体。

java中,除了定义为final的方法,其余所有方法的联编都采用晚联编技术。

相关文章

  • Java 多态、组合、继承

    多态 组合 继承

  • PHP学习2

    六.继承与多态 1. 类的组合和继承(继承===“是、像”、“父与子”,组合===“需要”、“整体与局部”) 组合...

  • 继承、多态、组合

    一、简介 extends——“is-a”(是一个)的关系是用继承来表达的; “has-a”(有一个)的关系是用组合...

  • 【python面试指北】3.类和面向对象

    面向对象编程 封装、继承、多态 组合与继承 优先使用组合(has a)而非继承(is a) 类变量和实例变量的区别...

  • 设计模式总结

    1、模式依赖基础与原则 1.1、基础 抽象,封装,多态,继承 1.2、原则 封装变化,多用组合、少用继承,针对接口...

  • 《Java编程思想》笔记4:继承,多态

    本篇关注:继承(第7章),多态(第8章) 组合 composition:将现有类的对象引用放于新类中。 继承 in...

  • 设计模式要点

    OO指面向对象 OO基础 抽象 封装 多态 继承 OO原则 封装变化 多用组合,少用继承 针对接口编程,不针对实现...

  • 面向对象

    基础 抽象 封装 多态 继承 原则 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程 为交互对象之间的松...

  • 面向对象设计基础&原则

    面向对象设计基础 抽象 封装 继承 多态 面向对象设计原则 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程

  • 编程模式·小结

    常见编程模式小结 继承 & 组合复用代码,两者都可以继承有多态效果,满足“里氏代换原则”设计上最好用单继承多接口(...

网友评论

      本文标题:继承、多态、组合

      本文链接:https://www.haomeiwen.com/subject/lucwcftx.html