您的位置 首页 java

好程序员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来修饰了,此时这个方法将无法被非抽象子类重写,那这个子类就会有问题。

> 抽象类和抽象方法的实用场景:

>

> 可以用抽象类和抽象方法来实现一些简单规则的制定。

>

> ​ 例如:所有的快递公司都必须要会xxxxx。KFC、麦当劳、

>

> 如果仅仅用抽象类和抽象方法来进行规则指定、行为约束:

>

> ​ 弊端:因为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 {

>

> }

> “`

文章来源:智云一二三科技

文章标题:好程序员Java分享实用教程系列之对象的转型

文章地址:https://www.zhihuclub.com/191290.shtml

关于作者: 智云科技

热门文章

网站地图