java三大特性:(二)继承

来源:互联网 发布:2017怎么做淘宝客赚钱 编辑:程序博客网 时间:2024/06/14 01:37

extends

继承是java面向对象的三大特性之一,是java实现代码重用的重要手段之一。
java中只支持单继承,每个类只能有一个直接父类。

那么子类继承父类会得到父类的哪些特性呢:

  1. 继承public和protected修饰的属性值和方法,无论子类父类是否在同一个包里。
  2. 继承默认权限修饰符的属性和方法,但子类和父类必须在同一个包里。
  3. 无法继承private修饰的属性值和方法。
  4. 无法继承父类的构造方法。

访问修饰符权限


方法的重写

根据需求对从父类集成的方法重新编写,称为方法重写护着方法覆盖。必须满足以下要求:

  1. 必须有相同的方法名
  2. 必须具有相同的参数列表
  3. 返回值类型必须相同或是其子类
  4. 不能缩小被重写方法的访问权限

方法重载和方法重写有什么区别和联系??

重载涉及到同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型、访问修饰符权限无关。
重写涉及到子类和父类之间的同名方法,要求方法名相同、参数列表相同、返回值类型相同(或是其子类)、访问权限修饰符不能严格于父类。


super关键字

super代表当前对象的直接父类对象的默认引用,在子类中可以通过super关键字来访问父类成员。

super注意事项:

  1. super必须出现在子类(子类的方法和构造方法)中,而不是其他位置。
  2. 可以访问父类成员,如父类属性、方法、构造方法。
  3. 注意访问权限的限制,无法访问private修饰的成员。

Object类的重写

所有java类都直接或者间接地继承了java.lang.Object类。在定义一个类时,没有使用extends关键字,也就没有显示的继承某个类这个类直接继承Object类。

Object类相关方法说明


继承条件下的构造方法调用关系

  1. 如果子类的构造方法中没有super调用父类方法也没有this调用本类相关方法,则默认会先调用父类的无参构造。在此情况下有无super都一样。
  2. 如果子类的构造方法中通过super调用了父类的有参构造,则不会调用父类的无参构造
  3. 如果子类this调用,则会在相应构造方法中应用以上两条规则。
  4. 如果存在多级继承关系,则在创建一个子类对象时,会向更高一级父类应用,直到Object的无参构造为止。
  5. 执行顺序:父类和子类的静态代码块–父类的构造代码块–父类的构造函数–子类的构造代码块–子类的构造方法。子类的无参构造方法默认会super()。

代码实例:

public  class  a {    public a(){        System.out.println("a的无参构造");    }    public a(String name){        System.out.println("a的带参构造");    }    static{        System.out.println("a的静态代码块");    }    {        System.out.println("a的代码块");    }    public void as(){        System.out.println("a的方法");    }}
public class b extends a {    public b(){        System.out.println("b的无参构造");    }    public b(String name){        System.out.println("b的带参构造");    }    static{        System.out.println("b的静态代码块");    }    {        System.out.println("b的代码块");    }    public void sd(){        System.out.println("b的方法");    }    public static void main(String[] args) {        b b1=new b();        b1.sd();    }}

输出如下:

a的静态代码块b的静态代码块a的代码块a的无参构造b的代码块b的无参构造b的方法

abstract和final修饰符

abstract修饰的抽象类和抽象方法特点:

  1. 抽象类和方法都通过abstract修饰符修饰。
  2. 抽象类中可以有0个或多个抽象方法。
  3. 抽象方法只有方法声明,没有方法实现。public abstract void print();
  4. 有抽象方法的类必须声明为抽象类。
  5. 抽象类的子类必须重写所有的抽象方法才能够实例化,否则子类还是一个抽象类。
  6. 抽象方法可以有构造方法。可以被本类中的其他构造方法调用,没有private的话也可以被子类构造调用。

final修饰符方法特点:

    1.用final修饰的类,不能再被继承。    2. 用final修饰的方法不能被子类重写。    3. final修饰的变量将变成常量。    4. final不能修饰构造方法。

abstract和final可以对比记忆

static修饰符

http://blog.csdn.net/u012152619/article/details/46003303
清晰到位。

阅读全文
0 0
原创粉丝点击