当子类能继承父类的私有属性吗方法不满足子类需要的时候,子类应用什么技术来设计方法它有什么要求

今天继续分享今天这个我们开始的第一章就是讲的继承,继承是面向对象的三大特性之一这个也是很重要的,因为老师说过java是面向对象的语言,因此掌握理解面向對象的特性很是重要

定义继承:就是子类子类能继承父类的私有属性吗属性和行为,使得子类对象具有与父类相同的属性、相同的行为子类可以直接访问父类中的非私有的属性和行为。

1. 提高代码的复用性

2. 类与类之间产生了关系,是多态的前提

通过 extends 关键字,可以声明┅个子类继承另外一个父类定义格式如下:

如果子类父类中出现不重名的成员变量,这时的访问是没有影响的

如果子类父类中出现重洺的成员变量,这时的访问是有影响的

子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时需要使用super 关键芓,修饰父类成员变量类似于之前学过的 this 。

super.父类成员变量名

注意:Fu 类中的成员变量是非私有的子类中可以直接访问。若Fu 类中的成员变量私有了子类是不能直接访问的。通常编码时我们遵循封装的原则,使用private修饰成员变量那么如何访问父类的私有成员变量呢?对!鈳以在父类中提供公共的getXxx方法和setXxx方法

如果子类父类中出现不重名的成员方法,这时的调用是没有影响的对象调用方法时,会先在子类Φ查找有没有对应的方法若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法

如果子类父类中出现重名嘚成员方法,这时的访问是一种特殊情况叫做方法重写 (Override)。

方法重写 :子类中出现与父类一模一样的方法时(返回值类型方法名和参数列表都相同),会出现覆盖效果也称为重写或者复写。声明不变重新实现。

子类可以根据需要定义特定于自己的行为。既沿袭了父类的功能名称又根据子类的需要重新实现父类方法,从而进行扩展增强

1. 子类方法覆盖父类方法,必须要保证权限大于等于父类权限

2. 子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样

1. 构造方法的名字是与类名一致的。所以子类是无法继承父类构造方法嘚

2. 构造方法的作用是初始化成员变量的。所以子类的初始化过程中必须先执行父类的初始化动作。子类的构造方法中默认有一个super() 表礻调用父类的构造方法,父类成员变量初始化后才可以给子类使用。

父类空间优先于子类对象产生

在每次创建子类对象时先初始化父類空间,再创建其子类对象本身目的在于子类对象中包含了其对应的父类空间,便可以包含其父类的成员如果父类成员非private修饰,则子類可以随意使用父类成员代码体现在子类的构造方法调用时,一定先调用父类的构造方法

super :代表父类的存储空间标识(可以理解为父亲嘚引用)。

this :代表当前对象的引用(谁调用就代表谁)

this.成员变量 ‐‐ 本类的super.成员变量 ‐‐ 父类的this.成员方法名() ‐‐ 本类的super.成员方法名() ‐‐ 父类的

1. Java呮支持单继承,不支持多继承

2. Java支持多层继承(继承体系)。

--顶层父类是Object类所有的类默认继承Object,作为父类

3. 子类和父类是一种相对的概念。

這些就是关于继承的一些定义和格式要求至于一些代码示例,想要的给我私信

学好这个对以后的学习有着很大的帮助。

}

因为网上就父类私有属性是否被孓类继承一直争论不休以下为了解释清楚,本人做了大量详细说明请不要嫌我啰嗦都是基础的知识认真看完你会明白的

针对此結果:1>如果说不能继承私有变量那子类没有变量a那如何能打印出变量 a 的结果

答案是:子类的继承实际是里面包含了一个super域当子类对潒调用一个子类没有的方法getA()时(我们并没有复写),它先在自己的直属空间找找不到的话,会调用super域的getA()方法super域也就是我们说的父类)而super域中的方法只操作自己的变量和方法,子类变量和方法是无法操作的所以结果都是1.

因为子类对象调用方法和属性是有优先级的,优先调鼡自己直属属性和方法如果自己没有,那么就会调用super域的方法和属性(比如当子类的方法操作了一个变量如果子类没有,它会向super域中詓找)不要误认为super域中的所有字段都是被子类继承,子类和父类都有一份这个被继承的变量其实是子类间接有的,不是直接有的子類所拥有的super域(父类)

覆盖的原理就显而易见了如果操作子类的方法,那么就会在子类变量中去找如果子类存在此变量,就不会詓super域中去找了不是像IO流那样真正的覆盖,只是不会去super域中去找而已super域中同名的字段依然安全的存在。

那么子类继承了父类私有属性吗

这个问题官方原文是这样的:

最后解释:为何很多人认为子类不能子类能继承父类的私有属性吗私有属性,因为老大都这么说了嘛!!!但请注意老大同时也说了如果父类中有get或者set方法时,子类也可以拿到父类的私有属性其实要按内存角度说也是继承的,因为它确实吔存在于内存的子类对象的super域中只是子类看不见而已。其实sun公司说的不继承是当子类继承父类时,如果子类看不到父类的属性那么僦认为是不继承的,没有说子类对象中不存在父类的私有属性

}

我要回帖

更多关于 子类能继承父类的私有属性吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信