java里对多态的了解

java中多态性的理解

什么是多态?

1.面向对象的三大特性 封装,继承,多态,从一定角度看封装和继承都是为多态准备的。

2.多态的定义:允许不同的类对同一消息作出反应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式。

3.实现多态的技术叫做动态绑定,是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

4.多态的作用是消除类型之间的耦合关系。

现实生活中多态的例子:比如f1在word里是word的帮助文档,在eclipse里就是eclipse的帮助文档,在不同的类里发挥不同的作用。

多态存在的三个必要条件:

1.继承、

2.重写、

3.父类引用指向子类对象。

一个经典的案例

package homework;

public class A {

public String show(D obj){
return ("A and D");
}
public String show(A obj){
return ("A and A");
}
}

//

package homework;

public class B extends A{
public String show(B obj){
return ("B and B");
}
public String show(A obj){
return ("B and A");
}
}

//

package homework;

public class C extends B{

}

//

package homework;

public class D extends B{

}

//

package homework;

import org.omg.Messaging.SyncScopeHelper;

public class Lei {
public static void main(String[] args) {

A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D();
System.out.println(a1.show(b)); ①
System.out.println(a1.show(c)); ②
System.out.println(a1.show(d)); ③
System.out.println(a2.show(b)); ④
System.out.println(a2.show(c)); ⑤
System.out.println(a2.show(d)); ⑥
System.out.println(b.show(b)); ⑦
System.out.println(b.show(c)); ⑧
System.out.println(b.show(d)); ⑨
}
}

答案:

A and A
A and A
A and D
B and A
B and A
A and D
B and B
B and B
A and D

解释:对于①a1调用A中的show(A obj)方法,②同①,而三调用的是A中的show(D obj)方法

    而④,⑤,⑥,而言,④,⑤来说 是向上转型,将子类的实例赋值给父类引用,在向上转型的过程中会覆盖与父类中相同的方法,也就是重写,而对于⑥并没有重写A中的show(D obj)方法

    而⑦,⑧,⑨而言,就很好理解了 b.show(b)调用的都是B中的方法,几乎与①,②,③一样读者可自行理解。

时间: 2024-10-22 23:21:41

java里对多态的了解的相关文章

Java继承,多态,组合应用

继承:  面向对象的三大特征之一:    是类和类之间的一种拓展关系,是一种从一般到特殊的关系;    格式: sub   extends Super,  我们把sub称为子类或者拓展类, 把super称为父类或者基类(超类)   泛化: 把子类中的共性抽取到父类的过程; 特化: 子类在父类的基础之上,拓展自己特有的状态和特征;    Object: 是所有类的直接父类后间接父类;      class  Student{} 等价于  class  Student extends Object{

java中实现多态的机制是什么?

多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性.在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度:今天我们再次深入Java核心,一起学习Java中多态性的实现. “polymorphism(多态)”一词来自希腊语,意为“多种形式”.多数Java程序员把多态看作对象的一种能力,使其能调用正确的方法版本.尽管如此,这种面向实现的观点导致了多态的神奇功能,胜于仅仅把多态看成纯粹的概念. Java中的多态总是子类型

Java 里的异常(Exception)详解

作为一位初学者, 本屌也没有能力对异常谈得很深入.   只不过Java里关于Exception的东西实在是很多. 所以这篇文章很长就是了.. 一, 什么是java里的异常 由于java是c\c++ 发展而来的,  首先我们先看看c语言里的错误. 1.1 c语言里的错误 我们实现1个程序的过程包括,  代码编写, 编译代码成为程序,  执行程序. . 其中大部分常见的语法错误都会被编译代码这样部过滤掉.   但是即使通过了编译. 执行程序这一步可能还是会有错误. 原因很多, 例如常见的除数为0,

Java里泛型有什么作用

1 泛型赋予了类型参数式多态的能力 2 泛型的第一个好处是编译时的严格类型检查,提高了程序的安全性和健壮性,这是集合框架最重要的特点. 3 泛型消除了绝大多数的类型转换.如果没有泛型,当你使用集合框架时,你不得不进行类型转换. 4 泛型简化了代码,应用泛型的程序提高程序的可读性,更利于团队的合作开发. Java里泛型有什么作用

Java封装继承多态

Java中的类可以分为三种: 类:使用class定义且不含有抽象方法的类. 抽象类:使用abstract class定义的类,它可以含有,也可以不含有抽象方法. 接口:使用interface定义的类. 类可以继承(extends)类,可以继承(extends)抽象类,可以继承(implements)接口. 抽象类可以继承(extends)类,可以继承(extends)抽象类,可以继承(implements)接口. 接口只能继承(extends)接口. 1.封装 类使得数据和对数据的操作集成在一起

java 小结2 多态问题。

面向对象这个东西,其实我们一直是不是都没有感觉到自己在用,以后我一定要用用.以前学c#时候认真的看过一次,最近一直研究java.随便再看看. 多态问题: 在java中多态分为(1)编译时多态和(2)运行时多态 (1)编译时多态比较容易理解:其实就是通过方法重载,就是方法的重载,同一个函数名但是可以参数不一样.这就是重载(so easy) (2)运行时多态:这个是通过方法覆盖实现的,就是子类在继承父类的时候,通过对某个方法的重写,覆盖父类方法. 简单的说:比如我们有个父类A,子类B通过Extend

Java里数值类型转换

1 import static java.lang.System.out; 2 3 public class testOnNumber { 4 public static void main(String[] args){ 5 //int转换成short,把低位截断给short 6 int i = 0xa0001231; 7 out.println(Integer.toBinaryString(i)); 8 out.println(i); 9 short s = (short) i; 10 ou

java继承和多态

java方法直接调用原理推测 有错误还望指正 当直接调用某对象的某方法时  会更具该对象获取到类信息对象   在从类信息对象中找到该方法 没找到 获取父类信息对象继续查找 找到了执行  jdk距离实现是通过反射还是其它? 如果按以上原理    以下情况解释不通 创建一子类对象  赋值给一父类指针变量  通过父类指针变量掉run方法   run方法在父类或子类中为私有  这种情况调用的是父类的run方法 并非子类的run方法 反射jar包 package extend; import org.ju

java里的基本数据类型

java里一共有八大数据类型 boolean(未定) char(2字节) byte(1字节) short(2字节) int(4字节) long(8字节) float(4字节) double(8字节),还有与之对应的包装类 Boolean Character Byte Short Integer Long Float Double, 基本数据与包装类之间的转换叫做装箱与拆箱 Integer i = new Integer(10);//装箱这个在java1.5之前只能这样new一个出来 Intege