java类与对象(继承知识点)-创新互联

继承综述

继承作为一个非常生活化的词汇,我们都比较容易理解。它描述的无非就是子从父那里自动获取到父的内容。

平潭网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联自2013年创立以来到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联

在面向对象编程当中,其实继承这个词汇的本质没有发生变化。它描述的是一种类与类之间的关系。子类通过继承机制自动拥有来自于父类的属性和行为,无需重新定义一次。

在Java当中要想实现继承也很简单,使用extends关键字即可。通过一个简单的例子,我们就可以看出来继承的效果,和使用的场景。

继承就是让子类自动具备父类的属性和行为,从而达到代码的复用性

注意:不是只要分析出具备相同属性行为,我们就去做继承。必须要具备类与类之间有is-a关系,我们才会去做继承。

继承的细节 父类的哪些内容会被继承

1、父类中的属性会被继承;就算是私有属性也会被继承,只是不能被看到而已; 访问修饰符控制的是是否能够被直接看到操作到,而不是是否能被继承。

2、父类中的行为也会被继承,与属性是同样的道理;

3、父类的构造方法是不能被子类继承的;WHY? 3-1、构造方法的名字必须和类名保持一致;父类的构造方法名字是父类类名;子类构造方法是子类类名。如果构造方法能够被继承,那么说明子类里面有一个构造方法,但名字是父类的,这很明显语法矛盾了;

3-2、构造方法的作用是产生对象;父类构造方法产生父类对象,子类构造方法产生子类对象。如果子类通过继承拥有了父类的构造方法,那么说明子类拥有一个产生父类的方法,这很明显伦理不允许。

extends

extends这个单词的本意其实不是继承,它的本意是扩展。也就是说:子类 extends 父类,描述的是子类在父类的基础上进行扩展。

这就给我们的设计带来了一个考量的分界线。书写父类的时候,我们的关注点是共有的内容;设计子类的时候,我们的关注点是这个子类特有的内容。这是一种思想的分离,让我们能够更加的专注。

class ClassA{
​
}
​
class ClassB extends ClassA{
​
}
​
class ClassC extends ClassB{
​
}
​

ClassA称为父类、ClassB称为子类;

ClassA称为超类或者基类,ClassB和ClassC都是它的派生类

如果需要画图表示他们的关系,那么ClassA<--- ClassB<--- ClassC,注意箭头的方向永远指向父类。

单继承

有父类,那有没有母类呢?在Java里面没有,虽然面向对象的思想当中,没有规定每个类只能有一个父类。但是,Java的设计时候,采用了单继承的方案,也就是每个子类只能有一个父类。

强调:单继承是Java语言的选择设计,有些别的编程语言是支持多继承的。

单继承好 还是 多继承好?各有优劣。 多继承的好处是丰富度的增加,子类既有来自于父类A的内容,也有来自于父类B的内容,甚至还有父类C。这样的话,可以让子类具备更高的丰富度。 但是,多继承也会带来关系复杂度的问题。比如,在继承结构上,多继承不可避免的会出现网状结构。

而在单继承当中,类与类之间的关系只能形成层次结构清晰的树形图。当然,丰富度肯定就被影响了。这也是我们后面会学习Java中的另一种数据类型--接口的原因。

所以记住,单继承是Java的选择,为了能够让类与类之间的关系清晰,然后牺牲了丰富度。为了解决这一问题,它又提出接口。

继承的内存模型

JVM是采用了一种叫做“内存叠加”的方式,来实现继承关系的。

当我们产生一个子类对象的时候,JVM是分两步走: 1、首先调用父类的构造方法,产生一个父类对象部分;

2、然后再调用子类构造,在上一步的父类对象部分之下叠加上子类特有部分的内容,从而形成一个完整的子类对象。

注意:1、每次new子类只产生了一个子类对象,而不是一个父类对象和一个子类对象;

2、在默认的情况下,子类会自动调用的是父类的无参构造;解决方案: 2-1、养成书写公共无参构造的习惯;这本身也是JavaBean的规范。

2-2、如果一定要去调用某个带参构造,那么我们就要学会使用另一个关键字了:super

super,大家可以看成是和this成对的。this有this.和this()两种用法,super也有super.和super()两种用法。其中,super()就是专门写在子类的构造方法里面,明确表示调用父类的哪一个构造。同样是通过形参与实参的匹配关系。 super()与this()一样,都只能写在构造方法里面,且只能是第一句。

this 和 super的对比

1、this() 与 super() 作用不同: this() 的作用,在本类的构造方法当中,调用本类的其它构造; super()的作用,在子类的构造方法当中,调用父类的指定构造。

书写位置相同: this()只能写在一个类的构造方法里面,且只能是第一句; super()只能写在一个类的构造方法里面,且也只能是第一句。 两者不能共存。

默认的情况: 一个构造方法里面如果不写this(),那么是没有默认的,即它不会主动自己去调用本类的另一个构造。 一个构造方法里面如果不写super(),那么是有默认的,即它一定会自己去调用父类的无参构造。

2、this. 与 super.

作用: this.是书写在一个类的内部代码块当中,用来调用当前对象的属性和行为的;含义是:当前对象,即“我”;

super.也是书写在一个类的内部代码块当中,用来调用当前对象从父类那里继承而来的属性或行为的;含义是:当前对象的父类对象部分;注意:super.也要受访问修饰符的限制。

this.能够看到本类自己定义的,也能够看到从父类继承而来的(但要受访问修饰符限制。)

super.只能看到从父类继承而来的(但是要受访问修饰符限制)

结论:1、this. 能看到的 super.不一定能看到; 2、super. 能看到的 this.一定能看到。 3、所以我们通常都是使用this.

4、只有一种情况下,我们会使用super.,那就是调用重写方法的时候。用this.调用的是子类重写后的方法,用super.调用的是子类重写前的方法。

方法重写

子类从父类那里继承了一个方法,然后把这个方法给重新实现了。

重写的要求: 1、方法名不能变; 2、参数列表不能变 3、返回类型不能变; 4、访问修饰符可以变大

重写 与 重载

重载是指,在一个类当中拥有多个同名方法,参数列表不同;

重写是指,子类把从父类那里继承而来的方法给重新实现了,要求方法名不变,参数列表不变,返回类型不变,访问修饰符不变或变大。

public >protected >默认 >private

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前名称:java类与对象(继承知识点)-创新互联
文章来源:http://pwwzsj.com/article/deejgh.html