java中继承关系总结
来源:互联网 发布:美国对中国的误解知乎 编辑:程序博客网 时间:2024/05/22 08:09
继承中的注意事项
1.子类重写父类中的方法,可以扩大修饰范围,但不能缩小修饰范围
如:
class Base {public Base (){ //... }public Base ( int m ){ //... }protected void fun( int n ){ //... }public class Child extends Base{// member methods编译通过// public void fun ( int n ) {// //... }// }编译不通过 private void fun( int n ){ //...} }}
1.直接先看代码案列
/父类package com.imooc;public class Cleanser { private String s = new String("Cleanser"); public void append(String a) { s += a; } public void dilute() { append(" dilute()"); } public void apply() { append(" apply()"); } public void scrub() { append(" scrub()"); } public void print() { System.out.println(s); } //子类package com.imooc;public class Detergent extends Cleanser { @Override public void scrub() { append(" Detergent.scrub()"); // super.scrub(); // Call base-class version } public void foam() { append(" foam()"); }}//子类1public class Detergent2 extends Cleanser { @Override public void scrub() { append(" Detergent2.scrub()"); // super.scrub(); // Call base-class version } public void foam() { append(" foam2()"); }} public static void main(String[] args) { Cleanser x = new Cleanser(); x.dilute(); x.apply(); x.scrub(); x.print(); }}
测试类:创建一个带有继承关系的对象
//测试类1public class testCleanser { @Test public void test() { Cleanser x = new Detergent(); //x为父类对象并派生出特有子类,不能直接调用子类的方法,x为向上转型// x.dilute();// x.apply(); x.scrub(); //默认调用的是子类重写后的方法 ((Detergent) x).foam();//运行不报错 x.print(); System.out.println("Testing base class:"); // Cleanser.main(args); }//测试类1-1public class testCleanser { @Test public void test() { //x为父类对象并派生出特有子类,不能直接调用子类的方法 Cleanser x=new Detergent2(); //x1为父类对象并派生出特有子类,不能直接调用子类的方法 Cleanser x1=new Detergent(); x.dilute();// x.apply(); x.scrub(); x1.scrub(); ((Detergent2) x).foam(); ((Detergent) x1).foam(); x.print(); System.out.println("-----------"); x1.print(); System.out.println("Testing base class:"); // Cleanser.main(args); }
输出为:
Cleanser dilute() Detergent2.scrub() foam2()-----------Cleanser Detergent.scrub() foam()Testing base class:
是不是感觉就如接口中的一个接口对应着不同的实现类,分别调用重写后的方法,只不过接口中的方法都是抽象方法罢了。
在来看一下:
直接new一个子类对象
/测试类2public class testCleanser { @Test public void test() { Detergent x = new Detergent();//x为子类对象,可以直接调用父类的(非私有)方法 x.dilute();// x.apply(); x.scrub();// ((Detergent) x).foam(); x.print(); System.out.println("Testing base class:"); // Cleanser.main(args); }}
直接new一个父类对象
//测试类3public class testCleanser { @Test public void test() { Cleanser x=new Cleanser();//x为父类对象,不能调用子类的方法 x.dilute();// x.apply(); x.scrub(); ((Detergent) x).foam();//运行报错,java.lang.ClassCastException: com.imooc.Cleanser cannot be cast to com.imooc.Detergent x.print(); System.out.println("Testing base class:"); // Cleanser.main(args); }}
以上是我的部分个人总结,博主还将继续完善,请大家多多支持
1 0
- java中继承关系总结
- java总结------接口 实现和继承关系
- Java中继承关系的实例分析
- java中继承关系学习小结
- java 继承关系中-执行顺序测试
- java 继承关系中-执行顺序测试
- 继承关系总结
- scala总结(3)-- scala中常用类型继承关系
- java中的继承关系
- java基础-继承关系
- java中的继承关系
- JAVA的继承关系
- java继承关系
- java继承关系
- java继承关系
- java集合继承关系
- Java继承关系
- java中继承,重载,覆盖总结
- 读书笔记数据科学入门————可视化数据
- Linux常用指令 4
- 图片上传
- 正则表达式30分钟入门教程
- hdu3662 +3D Convex Hull+三维凸包的表面多边形个数
- java中继承关系总结
- SELECT CASE WHEN THEN ELSE END AS
- java 全排列问题
- poj 1962 Corporative Network (并查集)
- Android M之权限请求
- Qt 5 中 winId 转 HWND
- java 生兔子问题
- 有用的Linux操作系统的基础命令总结
- poj3528Ultimate Weapon+三维凸包的表面积