黑马程序员---Java的继承

来源:互联网 发布:jquery相对于js的优点 编辑:程序博客网 时间:2024/05/17 00:52

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------

        java 和某些面向对象语言(如 c++)在实现继承的不同之处在于java只支持单继承,不支持多重继承,即java 中一个类只能继承于另一个类。我们将被继承的类称之为父类(基类),继承类称之为子类(派生类)。

一、关键字

       在java 中用关键字extends 来实现单继承。在前面所讲已知,实现继承关系的类之间有着必然的联系,不能将不相关的类实现继承,就象人类不能继承于鸟类!

二、如何判断类和类之间的关系

      我们已知当某类A和类 B之间有着共同的属性和行为时,那么类A 和类 B之间就可能是继承关系或者有着共同的父类。

三、继承的三个好处

     1.减少代码冗余;

     2.维护变得简单;

     3.扩展变得容易。

     注意:构造方法不能被继承!一个类得到构造构造方法只有两种途径:自定义构造方法;使用JVM分配的缺省构造方法。但是,可以在子类中访问父类的构造方法。

四、访问修饰符

     在java中是通过各种访问限定符来实现数据封装的,共分为四种访问级别(由高到低):private(私有)、friendly(缺省)、protected(受保护)、public(公共)。

     注意:以上四种访问修饰符可以作用于任何变量和方法,类只可以定义为默认或公共级别(嵌套类除外)。

    1.public(公共)

     当变量或方法被public修饰时,该变量和方法可以在任何地方(指的是任何包中)的任何类中被访问;

    2.protected(受保护的)

    当类的变量或方法被 protected 修饰时,该变量和方法只可以在同包中的任何类、不同包中的任何当前类的子类中所访问。即不同包中的任何不是该类的子类不可访问级别为protected的变量和方法。

    3.friendly(缺省的)

    当类的变量和方法没有显式地被任何访问区分符修饰时,该变量和方法的访问级别是缺省的。缺省的变量和方法只能在同包的类中访问。

    4.private(私有的)

    被 private 所修饰的所有变量和方法只能在所属类中被访问。即类的私有成员和变量只能在当前类中被访问。

 

    对于java 编译器来说,它只依据方法的名称、参数列表的不同来判断两个方法是否相同,如果出现两个名称相同、参数也完全一致的方法,那么编译器就认为这两个方法是完全一样的,也就是说方法被重复定义!

    通过重载,可以在一个类中定义相同名称、不同参数的实现相同功能的多个方法,这样就避免了给每个方法取不同名称、熟记每个不同名的方法对应的功能的额外工作量,提高了我们的开发效率。当一个类中的多个同名方法满足以下条件时之一时,即实现了方法重载:

    a. 不同的参数个数

    b. 不同的参数类型

    c. 不同的参数顺序

    如果有一个类带有几个构造函数,那么也许会想复制其中一个构造函数的某些功能到另一个构造函数中。可以通过使用关键字this作为一个方法调用来达到这个目的。对于this的任何调用,如果出现,在任何构造函数中必须是第一个语句。构造函数中调用另一构造函数,其调用(this()、super())有且只能有一次,并不能同时出现调用。

    覆盖是基于继承的,没有继承就没有覆盖。在 java 中,覆盖的实现是在子类中对从父类中继承过来的非私有方法的内容进行修改或扩展的一个动作(注意:不能违反访问级别的限制,即子类方法的访问级别不能低于父类方法的访问级别)。

     实现方法的覆盖必须满足以下所有条件:

     a. 覆盖方法的方法签名(方法名,参数,返回类型)必须与被覆盖方法的方法签名相同

     b. 覆盖方法的访问级别不能比被覆盖方法访问级别低

     c. 覆盖方法不能比它所覆盖的方法抛出更多的异常。

     在 java 中的多态就体现在一个变量可以引用多个不同类对象,前提是这些不同类必须有者共同的父类,从而该变量可以且只能调用每个不同对象之间的公共操作集(方法)。父类引用可以引用子类对象,同时该父类引用只能访问所有子类的公有操作集(从父类继承过来的成员);当子类中已覆盖继承方法时,父类变量调用的将是子类中的已覆盖方法!

    Extends Object是JVM自动给任意类加上去的,从而保证 java中的所有类都具备一个通用父类。既然Object是所有类的父类,那么我们就可以通过Object 数组来实现异类收集,由于多态性,Object数组就能收集所有种类的元素。

    父类的私有方法对于子类来说是不可见的,注意,不可见不等于没有,子类仍旧继承了父类所有的成员,那么这些私有的父类成员去哪了?实际上,它们都被隐藏,对子类来说,这些父类的私有成员都被隐藏了起来,从而导致子类中的不可见。

    我们通过super关键字显示地调用父类的构造函数,当然,也可以象使用this对象一样通过super调用父类的成员方法。比如:super.m1()等 但是,必须得注意:父类构造函数只能在子类构造函数中通过 super 显示调用,并且必须是第一句!

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 

原创粉丝点击