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运行时环境中,对于任意 ...
最新文章
- Kali Linux Web***测试之 WebSploit
- 物品推荐系统中的挑战和解决方案
- 神经网络粒子和物理粒子的一个本质差别
- 59. 螺旋矩阵 II(模拟)
- C++快速输入输出优化
- c语言整行乘非整形等于什么意思,C语言--整形升级寻常算术转换
- C#生成Excel报表 用MyXls组件生成更完美
- 全局变量初始化顺序探究
- 关于解决Python中requests模块在PyCharm工具中导入问题
- sql server 视图_轻松搜索SQL Server –搜索目录视图
- android fragment面试,Android fragment之间传递数据的方式?
- Linux网络命令之 `brctl`
- 泛函分析(空间部分)知识点总结
- Mac中微信文件的存储路径
- 制作可爱的小黄人插图
- 时序分析基本概念介绍Slew/Transition
- FlashFXP上传下载
- 面试被问TypeScript,我哑口无言
- 很牛的几篇圈内爆料——影视圈
- 镜子法则--看得人泪流满面!