继承的概述以及使用方法代码展示以及继承中构造方法的使用
来源:互联网 发布:php支付宝当面付demo 编辑:程序博客网 时间:2024/06/07 12:25
概述
把多个类中相同的内容给提取出来定义到一个类中。
实现格式
class 子类名 extends 父类名 {}
好处
A:提高了代码的复用性B:提高了代码的维护性C:让类与类之间产生了关系,是多态的前提
弊端
类的耦合性增强了。 开发的原则:低耦合,高内聚。耦合:类与类的关系内聚:就是自己完成某件事情的能力
继承类的特点
Java中继承的特点: A:Java只支持单继承,不支持多继承。 有些语言是支持多继承,格式:extends 类1,类2,.../*class Father {}class Mother {}class Son exnteds Father {} //正确的class Son extends Father,Mother {} // 错误的*/ B:Java支持多层继承(继承体系) class GrandFather {public void show() { System.out.println("我是爷爷");}}class Father extends GrandFather { public void method(){ System.out.println("我是老子"); }}class Son extends Father {}class ExtendsDemo2 { public static void main(String[] args) { Son s = new Son(); s.method(); //使用父亲的 s.show(); //使用爷爷的 }}
继承的注意事项
A:子类只能继承父类所有非私有的成员(成员方法和成员变量) B:子类不能继承父类的构造方法,但是可以通过super(马上讲)关键字去访问父类构造方法。 C:不要为了部分功能而去继承
继承中成员变量的关系:
A:子类中的成员变量和父类中的成员变量名称不一样,这个太简单。 B:子类中的成员变量和父类中的成员变量名称一样,这个怎么玩呢? 在子类方法中访问一个变量的查找顺序: a:在子类方法的局部范围找,有就使用 b:在子类的成员范围找,有就使用 c:在父类的成员范围找(不能再父类的方法范围类找, 只有在调用方法的时候其中的变量才会被调用),有就使用 d:如果还找不到,就报错。如果在子类的局部范围内有,成员范围类也有,父类的成员范围类也有那么问题来了问题是: 我不仅仅要输出局部范围的num,还要输出本类成员范围的num。怎么办呢? 我还想要输出父类成员范围的num。怎么办呢? 如果有一个东西和this相似,但是可以直接访问父类的数据就好了。 恭喜你,这个关键字是存在的:super。 this和super的区别? 分别是什么呢? this代表本类对应的引用。 super代表父类存储空间的标识(可以理解为父类引用,可以操作父类的成员) 怎么用呢? A:调用成员变量 this.成员变量 调用本类的成员变量 super.成员变量 调用父类的成员变量 B:调用构造方法 this(...) 调用本类的构造方法 super(...) 调用父类的构造方法 C:调用成员方法 this.成员方法 调用本类的成员方法 super.成员方法 调用父类的成员方法
继承中构造方法的使用
看程序写结果: A:成员变量的问题 int x = 10; //成员变量是基本类型 Student s = new Student(); //成员变量是引用类型 B:一个类的初始化过程 成员变量的初始化 默认初始化 显示初始化 构造方法初始化 C:子父类的初始化(分层初始化) 先进行父类初始化,然后进行子类初始化。 结果: YXYZ 问题: 虽然子类中构造方法默认有一个super() 初始化的时候,不是按照那个顺序进行的。 而是按照分层初始化进行的。 它仅仅表示要先初始化父类数据,再初始化子类数据。 意思就是说先走super然后初始化class X和class Y输出Y和X 然后接着执行Y y = new Y(); 最后执行System.out.print("Z");*/class X { Y b = new Y(); X() { System.out.print("X"); }}class Y { Y() { System.out.print("Y"); }}public class Z extends X { Y y = new Y(); Z() { //super System.out.print("Z"); } public static void main(String[] args) { new Z(); }}
1 0
- 继承的概述以及使用方法代码展示以及继承中构造方法的使用
- Java静态代码块、构造器、静态主方法以及继承后父类代码块的运行顺序
- 【C/C++学院】0822-类型转换函数与构造转换函数/类的继承/类的继承以及区别/继承静态成员与静态函数//继承实现代码重用/单继承QT案例/多继承简介以及实战/Gpu编程
- 构造方法的继承
- 继承的构造方法
- 继承的构造方法
- 关于PHP中构造函数以及子类继承父类构造函数的相关问题
- JavaScript中的继承以及实现继承的几种方法
- Java继承之间类的加载顺序, 以及代码块、构造块的执行顺序
- 继承中构造方法的关系
- 继承中构造方法的关系
- 继承中构造方法的关系
- 继承关系中构造方法的调用
- java类对象的继承以及使用
- C++中类的继承、组合以及继承组合混用时,类的构造和析构顺序
- 黑马程序员——Java基础——构造方法,static关键字,以及继承的详解
- 构造函数私有化的作用以及私有继承
- 继承关系中,代码执行的顺序。静态代码块、静态方法、构造方法
- 日期对象-Date
- Bootstrap整体架构
- ASP.NET-GridView数据绑定的几种方法
- JavaScript动态实现倒计时
- 广播实践部分——实现强制下线功能
- 继承的概述以及使用方法代码展示以及继承中构造方法的使用
- 省电续航-省电技术
- typedef enum
- Hdu2177-博弈(Sg函数找规律)
- ECNU_OJ_1000
- eclipse的设置
- 抓包
- Codeforces 633H. Fibonacci-ish II (Mo's Algorithm(莫队算法) + 线段树 + 离散化)
- Android中通过Tag为View保存数据绑定数据