java多态心得


为什么会出现多态?

Java 中的引用变量有两个类型,一个是编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给该变量的对象决定。如果编译时的类型与运行时的类型不一致就会出现所谓的多态。(Polymorphism)

例题如下:

 



 

 

现实生活中也有多态的原型:例如一个父亲F有两个孩子S1S2,而父亲又可以代表孩子做一些事情,即F即可以代表S1也可以代表S2,因此F具有一定的多态性。在Java中多态大多是指对象变量的多态,即一个F类型的变量既可以指向F类型的对象也可以指向S1S2类型的对象。(FS1S2之间需要存在继承关系)

注意:除了上述多态形式外,一个接口类型变量也可以指向其实现类的实例,这也是多态的一种表现。

(参考:《你必须知道的261Java问题》)


 

哈哈,上面的这幅图是不是很形象?吃糖相当于方法,而年龄则相当与属性。

关于强制类型转换

基本类型之间的强制转换只能在数值之间进行,这里所说的数值类型包括整数型、字符型和浮点型。但数值型不能和布尔型之间进行转换。

引用类型之间的转换只能把一个父类变量转换成子类类型,如果两个没有继承关系的类型,则无法进行类型转换,否则编译时会出现错误。如果试图把一个父类实例转换子类类型,则必须这个对象实际上是子类才行(即编译时类型为父类类型,而运行时类型是子类类型),否则在运行时会发生ClassCastException异常。

 

为了避免出现ClassCastException异常,可以使用instance of运算符判断是否可以转型成功。前面的程序可以加上:

If(objStr instanceof String){

String str=(String) objPri;

}

注意点:

当把子类对象赋给父类时,被称为向上转型(upcasting,这种转型总是可以完成的,这也从一个侧面证明了子类是一种特殊的父类。这种转型只是表明这个引用变量的编译类型是父类,但实际执行他的方法时,依然表现出子类对象的行为方式。但把一个父类对象赋给子类引用变量时,就需要进行强制类型转换。

instanceof 运算符的前一个数通常是一个引用类型的变量,后一个操作数通常是一个类(也可以是接口,可以把接口理解成一种特殊的类),它用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。如果是则返回true,否则返回false

使用instanceof 运算符事应该注意,前面的操作数的编译类型要么与后面的类相同,要么是后面类的父类,否则会引起编译错误。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java入门1·2·3:一个老鸟的Java学习心得》是一本与众不同的Java入门好书。作者以独特的视角,向Java初学者讲述了如何才能真正理解和掌握Java语言。《Java入门1·2·3:一个老鸟的Java学习心得》充分考虑了初学Java语言的种种困难,讲解时细致入微,抽丝剥茧,层层推进,并采用对比、比喻和类比的方式讲解,还给出了大量的流程图帮助读者理解各种概念和程序的运行过程。另外,作者专门录制了近16小时的多媒体语音教学视频帮助读者直观地学习。这些视频和书中的源代码一起收录于《Java入门1·2·3:一个老鸟的Java学习心得》的DVD光盘中。 《Java入门1·2·3:一个老鸟的Java学习心得》分3篇。第1篇为Java语言基本语法,包括Java语言概述、配置开发环境、Java中的基本数据类型、Java运算符、Java流程控制语句和数组。第2篇为Java语言高级语法,包括类、对象、方法、继承、多态、修饰符、接口、抽象类、内部类、Java异常处理和多线程编程。第3篇为Java语言编程进阶,包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP编程、Java UDP编程、Java Swing编程、JDBC编程,最后还给出了一个聊天程序实例和一个数据表操作窗口实例,将Swing、UDP、Java集合类、线程同步、接口和JDBC编程有机地结合起来,展示了开发一个简单程序的典型步骤。 《Java入门1·2·3:一个老鸟的Java学习心得》适合广大想学习一门编程语言的读者、没有任何基础的Java入门读者、Java自学人员、从其他语言转向Java语言的读者、大中专院校的学生和社会培训学生。
本书是一本与众不同的Java入门好书。作者以独特的视角,向Java初学者讲述了如何才能真正理解和掌握Java语言。本书充分考虑了初学Java语言的种种困难,讲解时细致入微,抽丝剥茧,层层推进,并采用对比、比喻和类比的方式讲解,还给出了大量的流程图帮助读者理解各种概念和程序的运行过程。另外,作者专门录制了近16小时的多媒体语音教学视频帮助读者直观地学习。这些视频和书中的源代码一起收录于本书的DVD光盘中。 本书分3篇。第1篇为Java语言基本语法,包括Java语言概述、配置开发环境、Java中的基本数据类型、Java运算符、Java流程控制语句和数组。第2篇为Java语言高级语法,包括类、对象、方法、继承、多态、修饰符、接口、抽象类、内部类、Java异常处理和多线程编程。第3篇为Java语言编程进阶,包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP编程、Java UDP编程、Java Swing编程、JDBC编程,最后还给出了一个聊天程序实例和一个数据表操作窗口实例,将Swing、UDP、Java集合类、线程同步、接口和JDBC编程有机地结合起来,展示了开发一个简单程序的典型步骤。 本书适合广大想学习一门编程语言的读者、没有任何基础的Java入门读者、Java自学人员、从其他语言转向Java语言的读者、大中专院校的学生和社会培训学生。
Java多态指的是同一个方法名可以根据不同的对象调用出不同的行为。具体来说,多态是一种面向对象编程的特性,实现多态的方式主要有两种:方法重载和方法覆盖。方法重载指的是在一个类中定义多个同名方法,但这些方法有不同的参数列表,编译器会根据参数列表的不同选择合适的方法进行调用。方法覆盖指的是子类重写父类的方法,使得在使用父类对象调用该方法时,实际调用的是子类中的方法。 多态的好处在于,它可以提高代码的灵活性和可扩展性。通过多态,我们可以为不同的对象提供不同的行为,从而使得程序更加具有扩展性。此外,多态还可以让程序的调用更加简洁、清晰,提高了代码的可读性和可维护性。 下面是一个简单的Java多态的例子: ```Java class Animal { public void makeSound() { System.out.println("动物发出声音"); } } class Cat extends Animal { public void makeSound() { System.out.println("猫发出“喵喵”的声音"); } } class Dog extends Animal { public void makeSound() { System.out.println("狗发出“汪汪”的声音"); } } public class PolymorphismExample { public static void main(String[] args) { Animal animal1 = new Animal(); Animal animal2 = new Cat(); Animal animal3 = new Dog(); animal1.makeSound(); // 动物发出声音 animal2.makeSound(); // 猫发出“喵喵”的声音 animal3.makeSound(); // 狗发出“汪汪”的声音 } } ``` 在上面的例子中,Animal是一个父类,Cat和Dog是Animal的子类。Animal类中定义了一个makeSound()方法,Cat和Dog类分别重写了这个方法。在main()方法中,我们创建了三个Animal类型的对象,并分别调用它们的makeSound()方法。由于animal2和animal3都是Animal类型的对象,但实际上它们分别是Cat和Dog类型的对象,因此在调用它们的makeSound()方法时,实际上是调用了它们各自的实现,也就是Cat类和Dog类中重写的makeSound()方法。这就是Java多态的表现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值