zoukankan      html  css  js  c++  java
  • 浅谈Java中类的继承

    继承作为面向对象的三大基本特征之一,也是Java中必不可少的组成部分。因此,Java中类的继承和其他面向对象语言的继承都是大同小异的。

    继承的优点:

    1. 通过继承可以简化类的定义.
    2. Java只支持单继承,不允许多重继承.
    3. 可以有多承继承,即一个类可以继承某个类的子类,如类B继承了类A,类C又继承了类B,那么C也间接的继承了A.
    4. 子类继承所有父类的成员变量和成员方法,但不继承父类的构造方法.在子类的构造方法中,可使用语句super(参数列表)调用父类的构造方法.
    5. 如果子类的构造方法中没有显性的调用父类的构造方法,也没有使用this关键字调用重载的其它构造方法,则在产生子类的实例对象时,系统默认调用父类无参数的构造方法.

    举例说明:

    子类的声明

     
    1 class 子类名 extends 父类名  
    2 {  
    3      成员变量  
    4      成员函数  
    5 }  
    注意:当子类的成员变量和父类的成员变量同名时,就产生了变量覆盖的问题,变量的覆盖与变量的类型无关只与变量名相关,当子类执行继承自父类的方法时,处理的是父类的成员变量
     
     1 class cam0  
     2 {  
     3     double size=0;  
     4     void printsize()  
     5     {  
     6         System.out.println(size);  
     7     }  
     8 }  
     9 class cam1 extends cam0  
    10 {  
    11     double size=20;  
    12 }  
    13 public class cam2  
    14 {  
    15     public static void main(String args[])  
    16     {  
    17         cam1 a=new cam1();  
    18         System.out.println(a.size);  
    19         a.printsize();  
    20     }  
    21 }  

    输出为

    20.0
    0.0
     
    当子类的成员方法与父类的成员方法的原型相同时,就会出现函数覆盖的问题
    函数的覆盖不仅与方法名相关,而且与其参数类型,顺序,数目,返回值相关
    注意: 子类不能继承父类的private方法
     
     1 class cam0   
     2 {  
     3     int size;  
     4     void printsize(int a)  
     5     {  
     6         System.out.println("aaa");  
     7     }  
     8 }  
     9 class cam1 extends cam0  
    10 {  
    11     void printsize(double a)  
    12     {  
    13         System.out.println("bbb");  
    14     }  
    15 }  
    16 public class cam2   
    17 {  
    18     public static void main(String args[])  
    19     {  
    20         cam1 a=new cam1();  
    21         a.printsize(1);  
    22         a.printsize(1.0);  
    23     }  
    24 }  

    输出为

    aaa
    bbb
    因函数的参数类型不同,发生了重载
     
    这里说下构造函数的继承
    子类无条件继承父类不含参数的构造函数
    子类先执行父类的构造函数,再执行自己的构造函数
    子类可以通过在自己构造函数中使用super关键字来调用父类的构造函数,该语句必须出现在子类构造函数的第一个可执行语句
     
     1 class cam0  
     2 {  
     3     public cam0()  
     4     {  
     5         System.out.println("aaa");  
     6     }  
     7 }  
     8 class cam1 extends cam0  
     9 {  
    10     public cam1()  
    11     {  
    12         System.out.println("bbb");  
    13     }  
    14     public cam1(int i)  
    15     {  
    16         System.out.println("ccc");  
    17     }  www.2cto.com
    18 }  
    19 public class cam2  
    20 {  
    21     public static void main(String args[])  
    22     {  
    23         cam1 a=new cam1();  
    24         cam1 b=new cam1(1);  
    25     }  
    26 }  

    输出为

    aaa
    bbb
    aaa
    ccc
    即子类先执行父类的构造函数,再执行自己的构造函数。
  • 相关阅读:
    Manage by Xcode
    CrashLog查看
    关于NSDateFormatter的格式dd是月天,DD是年天
    【转】 XCode的一些调试技巧
    应用程序互相跳转
    【转】如何将TapkuLibrary框架添加到Xcode4工程项目中
    NSString initWithBytes: 有最大值限制
    在一个workspace中的 各个工程 最好设置一致
    从桌面应用自动化测试看移动应用自动化测试
    基于Android平台应用程序的关键字驱动自动化测试 – 理论、工具和实践
  • 原文地址:https://www.cnblogs.com/zzy9669/p/4014681.html
Copyright © 2011-2022 走看看