当前位置: 首页 / 技术干货 / 正文
分享实用的Java教程之对象的转型

2019-12-11

JAVAEE Java培训 好程序员

好程序员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 {

>    

>    }

>    ```

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号