java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE, JavaME, JavaSE)的总称。本站提供基于Java框架struts,spring,hibernate等的桌面应用、web交互及移动终端的开发技巧与资料

保持永久学习的心态,将成就一个优秀的你,来 继续搞起java知识。

概述

1把多个类中相同的内容给提取出来定义到一个类中。

实现格式

1class 子类名 extends 父类名 {}

好处

1A:提高了代码的复用性
B:提高了代码的维护性
C:让类与类之间产生了关系,是<a href="http://www.cfei.net/archives/tag/%e5%a4%9a%e6%80%81" title="浏览关于“多态”的文章" target="_blank" class="tag_link">多态</a>的前提

弊端

1类的耦合性增强了。   
开发的原则:低耦合,高内聚。
耦合:类与类的关系
内聚:就是自己完成某件事情的能力

继承类的特点

1Java中继承的特点:
    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(); //使用爷爷的
    }
}

继承的注意事项

1    A:子类只能继承父类所有非私有的成员(成员方法和成员变量)
    B:子类不能继承父类的构造方法,但是可以通过super(马上讲)关键字去访问父类构造方法。
    C:不要为了部分功能而去继承

继承中成员变量的关系:

1    A:子类中的成员变量和父类中的成员变量名称不一样,这个太简单。
    B:子类中的成员变量和父类中的成员变量名称一样,这个怎么玩呢?
        在子类方法中访问一个变量的查找顺序:
            a:在子类方法的局部范围找,有就使用
            b:在子类的成员范围找,有就使用
            c:在父类的成员范围找(不能再父类的方法范围类找,
            只有在调用方法的时候其中的变量才会被调用),有就使用
            d:如果还找不到,就报错。

如果在子类的局部范围内有,成员范围类也有,父类的成员范围类也有
那么问题来了
问题是:
        我不仅仅要输出局部范围的num,还要输出本类成员范围的num。怎么办呢?
        我还想要输出父类成员范围的num。怎么办呢?
        如果有一个东西和this相似,但是可以直接访问父类的数据就好了。
        恭喜你,这个关键字是存在的:super。                        

        this和super的区别?
        分别是什么呢?
        this代表本类对应的引用。
        super代表父类存储空间的标识(可以理解为父类引用,可以操作父类的成员)

    怎么用呢?
        A:调用成员变量
        this.成员变量 调用本类的成员变量
        super.成员变量 调用父类的成员变量
        B:调用构造方法
        this(...)   调用本类的构造方法
        super(...)  调用父类的构造方法
        C:调用成员方法
        this.成员方法 调用本类的成员方法
        super.成员方法 调用父类的成员方法

继承中构造方法的使用

1    看程序写结果:
        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(); 
    }
}

java继承多态

因为水平有限,难免有疏忽或者不准确的地方,希望大家能够直接指出来,我会及时改正。一切为了知识的分享。

后续会有更多的精彩的内容分享给大家。