java三大特性:(二)继承

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值