继承的概述以及使用方法代码展示以及继承中构造方法的使用

来源:互联网 发布: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
原创粉丝点击