继承和向上转型

继承和向上转型

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

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

转载于:https://www.cnblogs.com/hyfblog/p/5834143.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值