码迷,mamicode.com
首页 > 编程语言 > 详细

浅谈Java中类的继承

时间:2014-10-10 01:41:33      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   ar   java   strong   sp   div   

继承作为面向对象的三大基本特征之一,也是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
即子类先执行父类的构造函数,再执行自己的构造函数。

浅谈Java中类的继承

标签:style   blog   color   使用   ar   java   strong   sp   div   

原文地址:http://www.cnblogs.com/zzy9669/p/4014681.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!