Java中的继承

来源:互联网 发布:俄罗斯残奥会禁赛知乎 编辑:程序博客网 时间:2024/06/06 17:46

                                                                             继承


     Java是纯面向对象的程序设计语言,所有的代码都包含在类中,所以了解类的四种基本特点对我们来说非常重要,即:继承、封装、多态和抽象,今天主要说一下类的继承。
   被继承的类一般被称为“超类”或“父类”,继承的类被称为“子类”,子类默认拥有父类的类体,在此基础上,子类还可以添加新的成员或修改继承了的方法,以满足新的需求。 Java中,实际上所有的类均直接或间接地继承自java.lang.Object类,也可以说Object类是Java中的总根类。当需要某个类继承自指定类时,将使用extends关键字,具体语法如下:
            class 子类名 extends 父类名

            {子类类体}

例如:

<span style="font-size:18px;">//交通工具类class Vehicle{}//汽车类,继承自交通工具类class Car extends Vehicle{}//卡车类,继承自汽车class Truck extends Car{}</span>


        当两个类有了继承与被继承的关系后,就会涉及成员变量的继承问题,父类成员变量能否被继承,完全取决于成员变量的访问限制,成员的访问限制级由访问修饰符确定,访问级别共有四种,分别是:公有(public)、私有(private)、默认(不写)和保护(protected)。

        对于子类,如果其父类的成员声明为public类型,那么无论这两个类是否在同一个包中,子类均能继承父类的该成员;当成员变量声明为private类型时,任何子类均不能继承该成员;protected类型和默认类型只有在谈论继承时才有区别,该区别为:当成员变量被protected修饰时,若访问该变量的类位于包外,则只有通过继承才能访问该变量。总结如下:

                                                                                                       访问权限
当前类当前包包外子类包外public可以访问可以访问可以访问可以访问protected可以访问可以访问可以访问
默认可以访问可以访问

private可以访问



     super

     对于成员变量来说,当子类具有名称与其父类的成员变量名称相同的成员变量时,在子类调用此名称的成员变量时,调用的将会是子类中本身具有的,而不是从父类继承的,

<span style="font-size:18px;">//父类class Father{String s="父类的成员变量";}//子类class Son extends Father{String s="子类的成员变量";public void show(){System.out.print("这里调用的是"+s);System.out.println("这里调用的是"+super.s);}}public class Sample1 {public static void main(String[] args) {//创建对象调用方法Son s=new Son();s.show();}}</span>
第一次输出的是子类中的字符串s,而第二次输出的是父类中的字符串s。父类中的成员对子类来说是可继承的,只是由于名称相同,所以父类中的成员被隐藏起来了。在子类中使用super关键字,便可访问父类的该变量。super和this一样,是一个预定义对象引用,它只能在子类中使用,用来访问父类成员。

       final

       当一个类被final修饰时,就表示该类不能再被继承,即使该类的访问限制为public类型的,也不能被访问。因此,只有当需要确保类中的方法都不要被重写改进时才应该用final修饰,。String类就是一个被final修饰的最终类,所以它不能被自由继承。final还可以用来修饰类中的方法。当一个类中的方法被final修饰时,就表示这个方法不能被子类重写,只能继承。

                                             
0 0