java类和对象之向上转型与向下转型

序言:

向上转型和向下转型这两个知识点,是为后面的java类和对象三大特性之多态服务的,我之所以分开讲解,是因为我害怕读者会出现知识凌乱的问题,因为我之前在学习这些内容的时候也会出现知识点很多,很乱的问题,本章的内容,不会讲解向上转型和向下转型的应用。

1.向上转型

(1).认识向上转型

向上转型是什么?通俗的讲,就是父类的引用变量,引用了子类对象,是小范围向大范围的转换,例如:(这个例子我会从头用到尾,读者请务必看懂)

class Animals{
    String name = "小白" ;
    int age = 18;

    public void eat(){
        System.out.println("正在吃饭");
    }
}
class Dog extends Animals{

    public void bark(){
        System.out.println("汪汪汪");
    }
}

这段代码中,我创建了一个父类Animals和子类Dog,Dog类继承Animals类,然后,我再创建一个主类,去实例化这些类,如下

public class Main {

    public static void main(String[] args) {
          Dog dog1 = new Dog();
          Animals animal1 = dog1;
    }
}

你会发现,本来,父类的引用变量是用来引用父类的对象的,但是我这里干了一件事,就是让父类的引用变量去引用子类的对象,如图

向上转型了之后,animal1可以访问父类的成员,但是不可以访问子类的成员,如图       

 很显然,编译器把bark()变红了,也就是说报错了,所以说,经过向上转型后的animal1,是无法访问子类的成员的,但是它仍然可以访问父类成员。

(2).向上转型有三种方式

1.直接赋值

直接赋值就不多说了,就是上面Animals类和Dog类的例子 

2.传参

如图(还是上面的那个例子),

3.通过返回值

通过返回值向上转型,有两种方式,

第一种:方法的返回值类型是父类

第二种:方法的返回值类型是子类

两种方法的区别并不大,区别就在于func()存的值是Animals类型还是Dog类型,这个留给读者自行思考吧

(3).向上转型的优缺点

1.优点:让代码变得更加灵活(学完多态就能理解到)

2.向下转型的缺陷:不能调用子类的成员

2.向下转型

既然有向上转型,那当然就有向下转型啦,但是向下转型,是基于向上转型的,为什么这么说呢?

你看,

java是不支持这样直接转换的,但是我可以这样

我的animal1经过向上转型后,再强制转换为原来的类型,就是向下转型啦,但是要注意,这个向下转型,只能转为它原本的类型,例如,我现在再创建一个Cat对象 ,如下,

然后再向下转型,用Cat的引用去接收

 看着好像没有报错,其实你一旦运行,他就会报错,如图

 

 所以,向下转型只能转为它向上转型之前的类型,通俗的讲,就是还原向上转型

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值