java多态和强制类型转换

简介: 子类可以赋值给超类,称之为向上转型,这个是自动的。 超类不可以赋值给子类,这个是向下转型,需要我们手动实现。 赋值给超类的子类引用在运行期间将表现出不同的特性,这就是多态。 小类型    可转换为   大类型  大类型   转小类型需要   强制转换 对于存在继承关系的强制类型转换:子类转换为父类属于向上塑型,可以直接转换父类转换为子类属于向下塑型,需要强制类型转换,但是不一定成功。

子类可以赋值给超类,称之为向上转型,这个是自动的。

 

超类不可以赋值给子类,这个是向下转型,需要我们手动实现。

 

赋值给超类的子类引用在运行期间将表现出不同的特性,这就是多态。

 

小类型    可转换为   大类型  

大类型   转小类型需要   强制转换

 

对于存在继承关系的强制类型转换:

子类转换为父类属于向上塑型,可以直接转换

父类转换为子类属于向下塑型,需要强制类型转换,但是不一定成功。成功的条件是这个父类是经过子类向上塑型转换来的

即 :Father father=new Son(); Son son=(Son)father;

对于不存在继承关系的强制类型转换,一般都是失败的(如果不写转换方法的话)

 

即:

 子类可转为父类,父类不可以转为子类(如果不用强制类型转换)

 

1.  子类和父类含有相同的成员变量的时候,访问的是父类的成员变量

2.  子类和父类含有相同的成员方法是,访问的是子类的成员方法

3.  子类和父类含有相同的静态函数和静态方法时,访问的是父类的。

4.  父类不能访问子类特有成员和方法(强制类型转换除外)

 

也就是说,只有在访问成员方法的时候,才会表现出多态。

 

或者说:

 

对象多态时:

1.成员变量:(不涉及覆盖)
编译时: 参考引用变量所属的类中是否有调用的成员变量, 有, 编译通过,没有,编译失败。
运行时: 参考引用变量所属的类中是否有调用的成员变量, 并运行该类所属中的成员变量。
简单的说:编译和运行都参考等号的左边。
2.成员函数(非静态):
编译时:参考引用变量所属的类中是否有调用的成员变量, 有, 编译通过, 没有,编译失败:
运行时:参考的是对象所属的类中是否有调用的函数。
简单的说:编译看左边, 运行看右边。
3.静态函数, 变量:
    编译和运行都是参考左边参数类型!
    其实静态方法不存在多态, 静态方法是属于类的,我们说的是对象的多态!静态方法直接用类名调用就好了,
    没必要创建对象!
    静态的方法只能被静态的方法所覆盖!
目录
相关文章
|
28天前
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
103 15
|
3月前
|
存储 Java 开发者
Java 中 Set 类型的使用方法
【10月更文挑战第30天】Java中的`Set`类型提供了丰富的操作方法来处理不重复的元素集合,开发者可以根据具体的需求选择合适的`Set`实现类,并灵活运用各种方法来实现对集合的操作和处理。
|
3月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
111 2
|
3月前
|
存储 Java 编译器
Java泛型类型擦除以及类型擦除带来的问题
泛型擦除是指Java编译器在编译期间会移除所有泛型信息,使所有泛型类型在运行时都变为原始类型。例如,`List<String>` 和 `List<Integer>` 在JVM中都视为 `List`。因此,通过 `getClass()` 比较两个不同泛型类型的 `ArrayList` 实例会返回 `true`。此外,通过反射调用 `add` 方法可以向 `ArrayList<Integer>` 中添加字符串,进一步证明了泛型信息在运行时被擦除。
75 2
|
4月前
|
存储 Java 测试技术
Java零基础-多态详解
【10月更文挑战第10天】Java零基础教学篇,手把手实践教学!
63 4
|
4月前
|
Java 编译器 程序员
Java多态背后的秘密:动态绑定如何工作?
本文介绍了Java中多态的实现原理,通过动态绑定和虚拟方法表,使得父类引用可以调用子类的方法,增强了代码的灵活性和可维护性。文中通过具体示例详细解析了多态的工作机制。
96 4
|
4月前
|
设计模式 Java
Java“不能转换的类型”解决
在Java编程中,“不能转换的类型”错误通常出现在尝试将一个对象强制转换为不兼容的类型时。解决此问题的方法包括确保类型间存在继承关系、使用泛型或适当的设计模式来避免不安全的类型转换。
542 7
|
4月前
|
Java 编译器
Java“返回类型为 void 的方法不能返回一个值”解决
在 Java 中,如果一个方法的返回类型被声明为 void,那么该方法不应该包含返回值的语句。如果尝试从这样的方法中返回一个值,编译器将报错。解决办法是移除返回值语句或更改方法的返回类型。
349 5
|
4月前
|
Java
Java 中锁的主要类型
【10月更文挑战第10天】
|
4月前
|
安全 Java
Java“不兼容类型” 错误怎么查找解决
在 Java 中遇到“不兼容类型”错误时,首先理解错误信息,它表明试图将一种类型赋给不兼容的类型。检查代码中类型不匹配的赋值、方法调用参数类型不匹配、表达式类型不兼容及泛型类型不匹配等问题。解决方法包括进行类型转换、修改代码逻辑、检查方法参数和返回类型以及处理泛型类型不匹配。通过这些步骤,可以有效解决“不兼容类型”错误,确保代码类型兼容性良好。
777 9

热门文章

最新文章