java基础--向上转型

为什么要用向上转型?因为为了让方法复用,只写一个以父类为形参的方法即可,不然形参为子类的话,每个子类都要单独写一个方法,那该多麻烦啊(只不过向上转型会丢失子类的特有方法)

向下转型是强转,可使用instance判断,用来调用子类的特有方法。

class Animal {
    public void move() {
        System.out.println("动物可以移动");
    }
}

class Dog extends Animal {
    @Override
    public void move() {
        System.out.println("狗可以跑和走");
    }
    public void bark() {
        System.out.println("狗可以吠叫");
    }
}

class TestDog {
//  形参类型只写一种Animal即可,如果没有向上转型,要写Dog,Fish,Cat等多种形参,那就累死了。
    public static void doEat(Animal h) {
        h.move();
    }
    public static void main(String args[]) {
        Animal a = new Animal(); // Animal 对象
// 下一行就是向上转型,需要Animal,给个Dog,也行吧,但是不能执行Dog类的特有方法了。
        Animal b = new Dog(); 
// 下一行需要Dog,给它Animal,肯定不行,编译出错!
//        Dog d =new Animal();  
        Dog c = new Dog();
        a.move();// 执行 Animal 类的方法
        b.move();//执行 Dog 类的方法
//        b.bark()  该方法使用失败
        c.bark();
//下两行体现了向上转型的精髓,假如没有向上转型,面对不同的实参,形参要写很多种,那样该方法要写多少个呀!!!!
        doEat(new Dog()); //狗可以跑和走
        doEat(new Animal()); //动物可以移动
    }
}

但是向上转型丢失了子类特有的方法,这个就需要向下转型来弥补了。

向下转型参考文献:8.JAVA-向上转型、向下转型 - 诺谦 - 博客园

-----------------------------------------------------------------------------------------------------------------------------

以下为入门知识,可不看。

package cn.com;
class BaseClass{
    public int book = 6;
    public void base(){
        System.out.println("父类的普通方法");
    }
    public void test(){
        System.out.println("父类被覆盖的方法");
    }
}

public class SubClass extends BaseClass {
    public String book = "java基础书";
    public void test(){
        System.out.println("子类覆盖父类的方法");
    }
    public void sub(){
        System.out.println("子类的普通方法");
    }

    public static void main(String[] args) {
        BaseClass abc = new SubClass();
        System.out.println(abc.book);
        abc.test();
        abc.base();
//      执行下面这一句会报错
//      abc.sub();
    }
}

输出结果:

6
子类覆盖父类的方法
父类的普通方法

得到结论。向上转型,是子类继承父类,并创建对象的过程。语法为“父类 对象名 = new 子类构造器”,如  父 对象 = new 子类();

子类继承后,只能调用父类中已有的方法,不能调用子类独特的方法。如果子类中已重写,则调用重写的方法。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值