博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java继承总结
阅读量:6150 次
发布时间:2019-06-21

本文共 2281 字,大约阅读时间需要 7 分钟。

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

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

View Code
1 class ClassB{ 2     ClassB(int i){ 3         i=1; 4         System.out.println("ClassB: " + i); 5     } 6 } 7  8 public class ClassA extends ClassB{ 9 10     public static void main(String[] args){11         ClassA demo = new ClassA();12     }13     14 }

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

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

View Code
1 class ClassB{ 2     ClassB(int i){ 3         i=1; 4         System.out.println("ClassB: " + i); 5     } 6 } 7  8 public class ClassA extends ClassB{ 9     ClassA(){10         System.out.println("ClassA");11     }12     13     public static void main(String[] args){14         ClassA demo = new ClassA();15     }16     17 }

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

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

View Code
1 class SuperClass{ 2     private String memberA = "############private member"; 3     public  String memberB = "------------public member"; 4      5     public String getMemberA(){ 6         return memberA; 7     } 8      9     public void setMemberA(String a){10         memberA = a;11     }12     13     SuperClass(int i){14         i=1;15         System.out.println("ClassB: " + i);16     }17 }18 19 public class SubClass extends SuperClass{20     SubClass(){21         super(1);22         System.out.println("ClassA");23     }24     25     public static void main(String[] args){26         SubClass demo = new SubClass();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 }

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

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所调用的方法将按照子类中的方法逻辑执行。

 

 

 

 

转载于:https://www.cnblogs.com/amunote/articles/3041540.html

你可能感兴趣的文章
极客Web前端开发资源大荟萃#001
查看>>
让div固定在某个位置
查看>>
Java开发环境Docker镜像
查看>>
从无到有,WebService Apache Axis2初步实践
查看>>
任务调度(一)——jdk自带的Timer
查看>>
UIKit框架(15)PCH头文件
查看>>
整理看到的好的文档
查看>>
Linux磁盘管理和文件系统管理
查看>>
linux运维人员的成功面试总结案例分享
查看>>
Windows DHCP Server基于MAC地址过滤客户端请求实现IP地址的分配
查看>>
命令查询每个文件文件数
查看>>
《跟阿铭学Linux》第8章 文档的压缩与打包:课后习题与答案
查看>>
RAC表决磁盘管理和维护
查看>>
Apache通过mod_php5支持PHP
查看>>
发布一个TCP 吞吐性能测试小工具
查看>>
java学习:jdbc连接示例
查看>>
PHP执行批量mysql语句
查看>>
Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块
查看>>
Silverlight 如何手动打包xap
查看>>
建筑电气暖通给排水协作流程
查看>>