JAVA继承心得体会及建议_Java继承总结

原文见于:http://dbear.iteye.com/blog/641709

1、如果父类拥有自定义构造器,但并没有定义不带参构造器,那么子类也一定要自定义构造器,否则无法通过编译。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.pngView Code

1 classClassB{2 ClassB(inti){3 i=1;4 System.out.println("ClassB: " +i);5 }6 }7

8 public class ClassA extendsClassB{9

10 public static voidmain(String[] args){11 ClassA demo = newClassA();12 }13

14 }

无法通过编译,结果如下图:

c0f188478ea659337b14418be9329068.png

2、子类自定义构造函数的首行要显式的调用父类的某一构造函数进行初始化,如果不显式的调用,那么子类构造函数就会调用父类默认构造函数(即无参构造函数),否则无法通过编译。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.pngView Code

1 classClassB{2 ClassB(inti){3 i=1;4 System.out.println("ClassB: " +i);5 }6 }7

8 public class ClassA extendsClassB{9 ClassA(){10 System.out.println("ClassA");11 }12

13 public static voidmain(String[] args){14 ClassA demo = newClassA();15 }16

17 }

无法通过编译,结果如下图:

25701e3a191746fe1776ca2660a8053d.png

3、子类不能直接使用和读取父类的private数据,要通过父类提供的public access方法,即getter和setter。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.pngView Code

1 classSuperClass{2 private String memberA = "############private member";3 public String memberB = "------------public member";4

5 publicString getMemberA(){6 returnmemberA;7 }8

9 public voidsetMemberA(String a){10 memberA =a;11 }12

13 SuperClass(inti){14 i=1;15 System.out.println("ClassB: " +i);16 }17 }18

19 public class SubClass extendsSuperClass{20 SubClass(){21 super(1);22 System.out.println("ClassA");23 }24

25 public static voidmain(String[] args){26 SubClass demo = newSubClass();27 try{28 System.out.println(demo.memberA);29 }catch(Exception e){30 e.printStackTrace();31 }32 System.out.println(demo.getMemberA());33 System.out.println(demo.memberB);34 }35

36 }

无法通过编译,存在错误:

70593e699bf0393257b959d44855fb4f.png

4、如果子类重写了父类的某个method,那么子类在重写的方法中要调用父类的方法就需要用super.someMethod()的形式调用,否则系统会报运行时错误 java.lang.StackOverflowError(因为系统反复调用的都是子类的重写方法,造成死循环)。

5、重写的意思是:返回值类型,方法名,参数类型和个数都要相同(返回值类型在SE5.0时也可以不同)

6、子类重写父类的方法,子类方法不可降低父类方法的作用域,如:父类某方法的作用域是protected,那复写方法不可以是friendly和private,只能是protected或public。

7、可以将子类对象赋给父类型变量,即 SuperClass e = new SubClass(), 反之不可; 但编译器仍只认为e属于SuperClass类型,因此不能调用SubClass的特有成员和方法(即新增的方法,而不是重写的方法),但可以调用被重写了的方法,并且由于动态绑定,e所调用的方法将按照子类中的方法逻辑执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值