java 继承总结
来源:互联网 发布:网络营销策划是it吗 编辑:程序博客网 时间:2024/06/06 14:09
1、构造函数
1、 如果父类有无参数的构造函数(也可以有有参数的构造函数),子类构造函数无需要显示调用,系统会自动调用父类的无参数构造函数;
父类
public class Father {public Father(){System.out.println("父类的无参数构造函数");}public Father(String str) {System.out.println("父类的有参数构造函数1");}public Father(int number) {System.out.println("父类的有参数构造函数2");}}
子类
<span style="font-size:14px;">public class Child extends Father {public Child() {// super(); 在这里会默认调用无参数的父类构造函数System.out.println("子类的无参数构造函数");}}</span>运行
<span style="font-size:14px;">public class Test extends Father {public static void main(String[] args) { new Child();}}</span><span style="font-size:18px;"></span>结果:
父类的无参数构造函数
子类的无参数构造函数
2、 如果父类只有有参数的构造函数,子类构造函数必须显示调用,否则会编译出错;
父类
public class Father {public Father(String str) {System.out.println("父类的构造函数");}public Father(int number) {System.out.println("父类的构造函数");}}子类
public class Child extends Father {public Child() {super(5);//父类没有无参的构造函数,必须调用有参的构造函数,调用哪个构造函数都可System.out.println("子类的无参数构造函数");} }
2、方法覆盖
1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
3、子类的静态方法不能覆盖同名的父类实例方法,会编译出错 4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖
3、成员覆盖
public class Father {public int number;public Father(){System.out.println("父类的无参数构造函数");}public Father(String str) {this.number=0;System.out.println("父类的构造函数");}public Father(int number) {this.number=number;System.out.println("父类的构造函数");} public int getNumber() { number++; System.out.println("我是父类"); return number; } {System.out.println("父类的非静态代码块");}static {System.out.println("父类的静态代码块");}public void FPrint() {System.out.println("父类的方法F");}public void Print() {System.out.println("父类的方法P");}}子类
public class Child extends Father {public Child() { super(); // 在这里会默认调用无参数的父类构造函数//super(5);//父类没有无参的构造函数,必须调用有参的构造函数System.out.println("子类的无参数构造函数");}{System.out.println("子类的非静态代码块");}static {System.out.println("子类的静态代码块");}public void CPrint(){super.FPrint();System.out.println("子类的方法");}public void Print(){ System.out.println("子类的覆盖");}}test
public class Test extends Father {public int number; public Test(int number) { super(number); } public int getNumber() { System.out.println("我是子类的"+number); number++; return number; } public static void main(String[] args) {// new Child();//new Out.inner().innerprint();Father f=new Test(17);System.out.println(f.getNumber());}}运行结果:
我是子类的0
1
把子类的getNumber方法注释掉
public class Test extends Father {public int number; public Test(int number) { super(number); } // public int getNumber() { // // System.out.println("我是子类的"+number);// number++; //// return number; // } public static void main(String[] args) {Father f=new Test(17);System.out.println(f.getNumber());}}运行结果:
我是父类
18
下面看一种特殊情况
public class Test extends Father {public int number; public Test(int number) { super(number); } public int getNumber() { System.out.println("我是子类的"+number); number++; return number; } public static void main(String[] args) {Father f=new Test(17);System.out.println("类别是Father的变量覆盖"+f.number);Test t=new Test(17);System.out.println("类别是Test的变量覆盖"+t.number);}}运行结果是:
父类的静态代码块
父类的非静态代码块
父类的构造函数
类别是Father的变量覆盖17 //这里没有
父类的非静态代码块
父类的构造函数
类别是Test的变量覆盖0
总结:属性的值取父类还是子类并不取决于我们创建对象的类型,而是取决于我们定义的变
量的类型。除了方法获取变量(当子类覆盖父类的成员变量时,父类方法使用的是父类的成员变量,子类方法使用的是子类的成员变量)。
下面转载一份博客:详细分析一下
0 0
- java继承覆盖总结
- JAVA异常总结 - 继承
- java 继承的总结
- JAVA异常总结 ------ 继承
- java继承总结
- Java知识总结-继承
- Java继承小总结
- java 继承总结
- java继承覆盖总结
- java继承知识总结
- java 继承总结
- java继承覆盖总结
- JAVA异常总结 ------ 继承
- java annotation继承总结
- java继承知识总结
- java继承覆盖总结
- java继承覆盖总结
- Java继承机制总结
- openwrt试用记录
- Android使用NIO开发客户端
- 常用生僻linux命令
- 《老罗的Android之旅》阅读笔记——Launcher和Zygote的启动过程
- 总结下网上的JS控制密码框获取焦点时文字消失,失去焦点时文字出现的方法
- java 继承总结
- servlet学习笔记
- Ceph OSD因为xfs fadvise(DONTNEED)问题无法启动
- mvc ajaxbeginform oncussful
- linux中源码编译安装git
- jstl 格式化
- 多线程基本概念
- .net与u3d通信
- jQuery序列化表单为JSON对象