继承和向上转型
之前在教科书上简单讲了继承的概念和实例,然后在 TIJ(thinking in java) 中看到了向上转型,感觉非常有趣,赶紧自己试了一下,非常神奇。
自己以前居然还不知道能这样子玩。继承概念不多说,向上转型:当一个子类对象作为参数传到以它父类作为参数的方法中,并且父类会识别到这个子类,并调用该子类的方法。
1.创建父类
//这是一个基类 父类 几何形 public class Shape { //画图 public void draw() { System.out.println("父类draw()方法"); } //清除 public void erase(){ System.out.println("父类erase()方法"); } //获取颜色 public void getcolor(){ System.out.println("父类getcolor()方法"); } //设置颜色 public void setcolor(){ System.out.println("父类setcolor()方法"); } }
可以看到这个父类拥有4个几何形的方法
2.创建子类
第一个子类,圆形
public class Circle extends Shape{ public void draw(){ System.out.println("画圆"); } public void erase(){ System.out.println("清除圆"); } }
第二个子类 正方形
public class Square extends Shape { public void draw(){ System.out.println("画正方形"); } public void erase(){ System.out.println("清除正方形"); } }
他们都继承了父类 Shape类,而且都重写了父类的方法
3.创建测试类
这里面编写了一个方法,dosomething(),它的参数是父类 shape对象,但是可以看到main方法中将Circle对象和Square对象传入dosomething()中。
public class Test { private static void dosomething(Shape sh){ sh.erase(); sh.draw(); sh.getcolor(); sh.setcolor(); } public static void main(String[] args) { Circle c = new Circle(); Square sq = new Square(); dosomething(c); dosomething(sq); } }
4.运行,查看结果
清除圆
画圆
父类getcolor()方法
父类setcolor()方法
清除正方形
画正方形
父类getcolor()方法
父类setcolor()方法
总结一下,当存在继承关系时,一个子类类型的参数可以当做父类类型的参数来进行传参,而且如果子类中有父类的方法,他会使用子类他自己的方法。
这样做的好处是什么?如果本来想要实现dosomething的功能,应该加上一些判断的语句,什么“如果是圆形,则调用圆形的方法,否则 如果是正方形,则调用正方形的方法”,这样代码会比较杂乱。
而且这样做感觉很高大上对不对^^