请选择 进入手机版 | 继续访问电脑版

好程序员-千锋教育旗下高端IT职业教育品牌

400-811-9990
我的账户
好程序员

专注高端IT职业培训

亲爱的猿猿,欢迎!

已有账号,请

如尚未注册?

[JavaEE] 好程序员Java培训分享实用教程系列之对象的转型

[复制链接]
admin 发表于 2019-12-11 14:46:24 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
好程序员Java培训今日分享实用的Java教程之对象的转型
> 体现:
>
> 1. 父类的引用可以指向子类的对象
> 2. 接口的引用可以指向实现类的对象
> 转型:
>
> 1. 向上转型
>    1. 由子类类型转型为父类类型,或者由实现类类型转型为接口类型
>    2. 向上转型一定会成功,是一个隐式转换
>    3. 向上转型后的对象,将只能访问父类或者接口中的成员
> 2. 向下转型
>    1. 由父类类型转型为子类类型,或者由接口类型转型为实现类类型
>    2. 向下转型可能会失败,是一个显式转换
>    3. 向下转型后的对象,将可以访问子类或者实现类中特有的成员
####instanceof关键字
> 1. 针对于向下转型的。
>
>    1. 如果向下转型不成功,会怎样?
>
>       1. 会有一个异常 ClassCastException
>
>    2. 如何避免这种情况?
>
>       1. 在向下转型之前,我们先判断一下这个对象是不是要转型的类型
>
>       2. 怎么判断?
>
>          1. 关键字 **instanceof**
>
>             ```java
>             Animal animal = new Dog();
>             if (animal instanceof Dog) {
>                 // 说明animal的确是一个Dog
>             }
>             ```
> 如果一个类中重写了父类的某一个方法。此时:
>
> 1. 如果用这个类的对象来调用这个方法,最终执行的是子类的实现。
> 2. 如果用向上转型后的对象来调用这个方法,执行的依然是子类的实现。
>    1. 因为向上转型后的对象,归根到底还是子类对象。
#### 抽象类与抽象方法
> 抽象:**abstract**
>
>  
>
> 抽象类:
>
>         用关键字abstract修饰的类,就是抽象类
>
> 抽象方法:
>
>         用关键字abstract修饰的方法,就是抽象方法
> 特点:
>
> 抽象方法:
>
>  1. 抽象方法使用abstract来修饰,只有声明,没有实现。
>
>     ```java
>     public abstract void bark();
>     ```
>
> 2. 抽象方法,只能够写在抽象类中。
>
> 抽象类:
>
> 1. 抽象类使用abstract来修饰,抽象类不能实例化对象。
> 2. 抽象类中是可以写非静态的成员的,这时候这些非静态成员是可以继承给子类的。
> 3. 抽象类中是可以包含构造方法的。
>
> 结合抽象类和抽象方法:
>
> 1. 非抽象子类在继承一个抽象父类的同时,要实现父类中所有的抽象方法。
> 注意事项:
>
> **final**关键字
>
> 1. 抽象类可以用final来修饰吗?
>    1. 不能!因为final表示这个类无法被继承。但是对于抽象类来说,如果无法被继承,则这个抽象类没有任何意义。
> 2. 抽象方法可以用final修饰吗?
>    1. 不能!因为final修饰的方法无法被重写。但是抽象方法又只能写在抽象类中。如果一个抽象方法用final来修饰了,此时这个方法将无法被非抽象子类重写,那这个子类就会有问题。
> 抽象类和抽象方法的实用场景:
>
> 可以用抽象类和抽象方法来实现一些简单规则的制定。
>
>         例如:所有的快递公司都必须要会xxxxxKFC、麦当劳、
>
> 如果仅仅用抽象类和抽象方法来进行规则指定、行为约束:
>
>         弊端:因为Java是单继承的语言,如果一个类为了遵循某一种规范,而去继承一个抽象类,此时这个类将无法再继承其他类。
>
>         为了解决这样的问题,我么可以使用接口进行行为约束,规范代码。
#### 接口
> 关键字:**interface**
>
>  
>
> 语法:
>
>         和类是比较像的,但是他不是类
>
> ```java
> [访问权限修饰符] interface 接口名字 {
>     // 接口中的成员
> }
> ```
>
>          1. 访问权限修饰符:和类一样,只能有 public 和默认的default权限。
>          2. 接口不是类,不能实例化对象。
>          3. 接口,暂时和类写成平级的关系。
>          4. 接口名字是一个标识符,遵循大驼峰命名法
> 接口中成员的定义:
>
> 1. 属性:接口中的属性,默认的修饰符是 **public static final**
> 2. 构造方法:接口中不能写构造方法
> 3. 方法:
>    1. 接口中的方法都是抽象方法
>    2. 接口中的方法访问权限修饰符都是public
> 接口是需要被类来实现的。
>
> 实现接口关键字: **implements**
>
> 让类实现接口:
>
> ```java
> public class Shunfeng extends Company implements Express {
>     
> }
> ```
>
> 1. 一个非抽象类在实现接口后,需要实现接口中所有的抽象方法。
>
> 2. 一个类在继承自一个父类后,还可以再去实现接口。
>
>    1. 如果同时有父类和接口,那么继承父类在前,实现接口在后
>
> 3. 一个类可以实现多个接口
>
>    1. 如果一个类实现的多个接口中有相同的方法,这个方法在实现类中只需要实现一次即可。
>
> 4. 接口之间是有继承关系的,而且接口之间的继承是多继承。
>
>    ```java
>    public interface GrilFriend extends HouseKeeping, Takecare {
>   
>    }
>    ```

精彩内容,一键分享给更多人!
回复

使用道具 举报

您需要登录后才可以回帖

本版积分规则

关注我们
好程序员
千锋好程序员

北京校区(总部):北京市海淀区宝盛北里西区28号中关村智诚科创大厦

深圳西部硅谷校区:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619

杭州龙驰智慧谷校区:浙江省杭州市下沙经济技术开发区元成路199号龙驰智慧谷B座7层

郑州校区:郑州市二七区航海中路60号海为科技园C区10层、12层

Copyright 2007-2019 北京千锋互联科技有限公司 .All Right

京ICP备12003911号-5 京公安网11010802011455号

请您保持通讯畅通1对1咨询马上开启