Java学习总结:12
多态性
1.方法的多态性:重载和覆写
重载:同一个方法名称,根据不同的参数类型及个数可以完成不同的功能;
覆写:同一个方法,根据不同的实例化的子类对象不同,所完成的功能也不同。
2.对象的多态性:父子类对象的转换
向上转型:子类对象变为父类对象,格式:父类 父类对象=子类实例,自动转换;
向下转型:父类对象变为子类对象,格式:子类 子类对象=(子类)父类实例,强制转换;
例:对象向下转型:
class A4{public void print(){System.out.println("父类");}
}
class B4 extends A4{public void print(){System.out.println("子类");}
}
public class Test1_1_3_7 {public static void main(String args[]){A4 a=new B4();a.print();}
}
//结果:
//子类
根据实例化对象所在的类是否覆写了父类中的方法来决定最终执行,本程序实例化的是子类对象(new B4()),并且print()方法又是被子类覆写了,那么最终所调用的一定是被覆写过的方法(不要看类名称,而要看实例化对象的类)。
例:对象向下转型
class A4{public void print(){System.out.println("父类");}
}
class B4 extends A4{public void print(){System.out.println("子类");}
}
public class Test1_1_3_7 {public static void main(String args[]){A4 a=new B4(); //实例化的是子类对象,对象向上转型B4 b=(B4)a; //对象需要强制性地向下转型b.print(); //调用被子类覆写过的方法}
}
//结果:
//子类
因为有强制转换的操作,所以向下转型操作本身是有前提条件的,即必须发生向上转型后才可以发生向下转型。
例:错误的向下转型操作
class A4{public void print(){System.out.println("父类");}
}
class B4 extends A4{public void print(){System.out.println("子类");}
}
public class Test1_1_3_7 {public static void main(String args[]){A4 a=new A4(); //直接实例化子类对象,没有进行向上转型//此时并没有发生子类对象向上转型的操作,所以强制转型会带来安全隐患B4 b=(B4)a; //强制向下转型,产生异常b.print(); //此语句无法执行}
}
特点:
向上转型:其目的是参数的统一,但是向上转型中,通过子类实例化后的父类对象所能调用的方法只能是父类中定义过的方法;
向下转型:其目的是父类对象要掉用实例化它的子类中的特殊方法,但是向下转型是要强制转换的,这样的操作容易带来安全隐患。
为了保证转型的顺利进行,Java提供了一个关键字:instanceof,利用此关键字可以判断某个对象是否是指定类的实例。
使用格式如下:
对象 instanceof 类 返回boolean型
如果某个对象是某个类的实例,就返回true,否则返回false。
例:使用instanceof判断
class A6{public void print(){System.out.println("父类");}
}
class B6 extends A6{public void print(){ //覆写System.out.println("子类");}public void funB(){System.out.println("子类扩充的方法");}
}
public class Test1_1_3_9 {public static void main(String args[]){fun(new B6()); //对象向上转型}public static void fun(A6 a){a.print();if(a instanceof B6){ //如果a对象是B6类的实例B6 b=(B6)a; //向下转型b.funB(); //调用子类扩充的方法}}
}
//结果
//子类
//子类扩充的方法
Java学习总结:12相关推荐
- java学习第12天
java学习第12天 hashset 采用hash表实现 元素不重复,无序的,允许存null HashSet的常用方法 //创建HashSet,默认长度是16,加载因子为0.75.HashSet< ...
- java学习笔记(12) —— Struts2 通过 xml /json 实现简单的业务处理
XML 1.引入dom4j-2.0.0.jar 2.引入jquery-1.8.2.js 3.新建common.js getInfo = function(){$.post("getXmlAc ...
- Java学习笔记12——JVM入门
文章目录 JVM简介和体系结构 JVM的位置 JVM的体系结构 类加载器 双亲委派机制 沙箱安全机制(了解即可) Native PC寄存器 方法区 栈 三种JVM 堆 新生区 永久区 堆内存调优 Jp ...
- Java学习笔记12
Object类是所有类.数组.枚举类的父类,是类层次结构的根类.每个类都使用Object作为超类.所有对象(包括 数组)都实现这个类的方法. Object类实现了以下方法: 我们来看看源码中getCl ...
- java学习(12):i++和++i的区别
先上代码: public static void main(String args[]) { int A = 1; int B = 10; int C = 100; int D = 1000; Sys ...
- Java学习笔记-12.传递和返回对象
1.Clone()方法产生一个object,使用方法后必须产生的object赋值. Vector v2 = (Vector)v.clone(); 2.Clone()方法在object中是保护类型方法, ...
- Java 学习(12)--接口
一.接口 (1)猫钻火圈,狗跳高等功能,不是动物本身就具备的,是在后面的培养中训练出来的, 这种额外的功能, java 提供了接口表示. (2)接口的特点: A:接口用关键字 interface 修饰 ...
- 菜鸟学习笔记:Java提升篇12(Java动态性2——动态编译、javassist字节码操作)
菜鸟学习笔记:Java提升篇12(Java动态性2--动态编译.javassist字节码操作) Java的动态编译 通过脚本引擎执行代码 Java字节码操作 JAVAssist的简单使用 常用API ...
- Java学习之路12——GUI编程
组件:窗口.弹窗.面板.文本框.列表框.按钮.图片.监听事件.鼠标.键盘事件 一.简介 GUI的核心开发技术:Swing AWT. 弊端: 页面不美观 需要jre环境 学习的必要性 可以写出自己心中想 ...
- java学习笔记13--反射机制与动态代理
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...
最新文章
- 周志华、宋继强谈如何培养高端AI人才,以及深度学习的局限性和未来
- ha-2:read-project-properties (default) on project
- php接收二进制流,php接收二进制流【转】
- 手机秒变IoT设备?——巧妙利用阿里云物联网平台
- 去海南旅游什么时间段去最好,哪里最好玩?
- 互联网公司端午节礼盒歧视指南
- 大数据可视化有哪些作用和优点
- VUE day_08(7.26)学子商城项目详细版
- PyCharm(Python编译器汉化)
- 5脚耳机插座原理图_拆解报告:JLab Go Air 真无线运动耳机
- 预充电电路工作原理_电动汽车电控系统预充电原理
- 增长率用计算机怎么算,操作方法:Excel使用公式来计算增长率教程
- stata构建ARIMA模型并作预测,命令及过程
- 2010 年全国大学生数学建模竞赛甘肃赛区 获奖情况
- DAVIS Driving Dataset 2020 (DDD20) 【转载】
- wishbone协议(B.3)下载地址
- 学习云计算有哪些优势?附学习路线图
- Matlab气液相界面,MATLAB,气液相平衡程序,求帮忙改一下。
- html里c3动画是什么,C3动画+H5知识点使用总结
- SSO单点登录_04