首页 > 代码库 > 浅谈Java中类的继承
浅谈Java中类的继承
继承作为面向对象的三大基本特征之一,也是Java中必不可少的组成部分。因此,Java中类的继承和其他面向对象语言的继承都是大同小异的。
继承的优点:
- 通过继承可以简化类的定义.
- Java只支持单继承,不允许多重继承.
- 可以有多承继承,即一个类可以继承某个类的子类,如类B继承了类A,类C又继承了类B,那么C也间接的继承了A.
- 子类继承所有父类的成员变量和成员方法,但不继承父类的构造方法.在子类的构造方法中,可使用语句super(参数列表)调用父类的构造方法.
- 如果子类的构造方法中没有显性的调用父类的构造方法,也没有使用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.com18 } 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中类的继承
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。