Java 多态
来源:互联网 发布:记账软件 共享 编辑:程序博客网 时间:2024/05/22 02:08
Java 多态
多态
- 概念
- 对象在不同时刻表现出来的不同状态
多态的前提
要有继承或者实现关系
要有方法的重写
要有父类引用指向子类对象
程序中的体现
- 父类或者接口的引用指向或者接收自己的子类对象
好处和作用
- 多态的存在提高了程序的扩展性和后期的可维护性
弊端
- 父类调用的时候只能调用父类的方法,不能调用子类的特有方法,因为你并不清楚将来会有什么样子的子类继承你。
多态的成员特点
成员变量
编译时期:看引用型变量所属的类中是否有所调用的变量;
运行时期:也是看引用型变量所属的类中是否有调用的变量。
简单记:编译和运行都看等号左边
成员方法
编译时期:看引用型变量所属的类中是否有所调用的成员;
运行时期:看对象所属的类中是否有调用的成员,如果父类出现同名的方法,会运行子类中的方法,因为方法有覆盖的特性。
简单记:编译看左边,运行看右边
静态方法
编译时期:看引用型变量所属的类中是否有所调用的变量;
运行时期:也是看引用型变量所属的类中是否有调用的变量。
简单记:编译和运行都看等号左边
向上转型和向下转型
一定不能够将父类对象转换成子类类型
父类引用指向子类对象,该引用可以被提升,也可以被强制转换。
多态自始至终都是子类对象在变化
示例
class Demo1 { public static void main(String[] args) { // 向上转型,类型提升 Phone p1 = new Nokia(); // 向下转型,强制将父类的引用转换成子类类型,不能将Nokia类型转换成MOTO或Nexus类型 Nokia no = (Nokia)p1; // 输出 Phone---null---0 ;因为继承了父类的方法 no.print(); Phone p2 = new Moto(); Moto mo = (Moto)p2; // 输出 Moto---red---1500 ;因为重写了父类的方法 mo.print(); Phone p3 = new Nexus(); // 输出 Nexus---red---2000 p3.print(); }}class Phone { String color; int price; public void print() { System.out.println("Phone---" + color + "---" + price); }}class Nokia extends Phone { String color = "red"; int price = 1000; //public void print() { // System.out.println("Phone---" + color + "---" + price); //}}class Moto extends Phone { String color = "red"; int price = 1500; public void print() { System.out.println("Moto---" + color + "---" + price); }}class Nexus extends Phone { String color = "red"; int price = 2000; public void print() { System.out.println("Nexus---" + color + "---" + price); }}
0 0
- Java学习 java -- 多态
- java多态
- java多态
- java多态
- java多态
- Java多态
- java多态
- JAVA@多态
- Java多态
- java 多态
- Java多态
- java多态
- [Java] 多态
- JAVA多态
- Java多态
- java多态
- java 多态
- java多态
- LINUX: 配置自己的网卡信息
- 【学习笔记】第十四章 类型信息
- HIVE之 将写好的sql 语句赋值到窗口, 出现“Display all 475 possibilities? (y or n)”问题
- hibernate中的查询(一)
- Swift、OC、C++混合编程
- Java 多态
- I/O多路转接
- Leetcode 151 Reverse Words in a String
- R中加载包失败,提示无法连接到服务器时的解决办法
- One for all, all for one
- call 方法
- 微信小程序开发过程中遇到的问题
- PPT中多页一次性插入公司图标
- 图片Base64加密实现图片传输