继承和向上转型

继承和向上转型

  之前在教科书上简单讲了继承的概念和实例,然后在 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的功能,应该加上一些判断的语句,什么“如果是圆形,则调用圆形的方法,否则 如果是正方形,则调用正方形的方法”,这样代码会比较杂乱。

  而且这样做感觉很高大上对不对^^

posted @ 2016-09-02 17:01  MouseKiller  阅读(1286)  评论(0编辑  收藏  举报