多态机制是面向对象技术的精华之一,它是建立在继承基础之上的。
多态(polymorphism):某一类事物的多种存在形态。
思想基础
类的继承中,子类在父类的基础上进行扩充和改造,父类拥有的成员子类中都有,子类的对象应该比父类的对象功能强,因而子类的对象应可以替代父类的对象被使用。
例:人中学生 ,教师, 工人
学生这个对象对应的类型:学生类型
学生 x=new 学生();
同时学生也是人,也可以把学生称为人
人 y = new 学生();
人是学生、教师、工人等具体事物中抽象出来的父类型。
- 体现:
- 父类的引用指向自己的子类对象;
- 父类的引用可以接收自己的子类对象。
-
子类的对象可以代替父类的对象使用。 人 y = new 学生();
- 前提:要有继承关系,存在覆盖。
-
好处:提高程序的扩展性。
- 弊端:只能使用父类引用访问父类中的成员。如果想访问子类的特有方法,强制将父类的引用转为子类类型。(子类名)父类名
-
成员方法:(动态绑定)编译看左边,运行看右边。
-
成员变量:编译和运行都看左边。
-
instanceof:检测一个对象的真正类型。
格式:<变量名> instanceof <类型>
功能:左侧的变量当前时刻所引用对象的真正类型是其右侧给出的类型、或是其子类,则整个表达式结果为true,否则结果为false。
例1.(456)
class Person
{
String str = "Person";
public void print(){
System.out.println("父类print()方法,对象是:"+this.toString());
}
}
class Student extends Person
{
String str = "Student";
public void print(){
System.out.println("子类print()方法,对象是:"+this.toString());
}
public void display(){
System.out.println("子类print()方法,对象是:"+this.toString());
}
}
class StudentTest
{
public static void main(String[] args)
{
Person p1 = new Person();
System.out.println("Person变量p1.str="+p1.str); //p
p1.print(); //父,p
Student s = new Student();
System.out.println("Student变量s.str="+s.str); //s
s.display(); //子,s
s.print(); //子,s
Person p2 = new Student(); //类型的提升,向上转型
System.out.println("Person变量p2.str="+p2.str); //p
p2.print(); //子,s
//p1.display();错:person中没有此方法
Student s1 = (Student) p1; //向下转型
s.display(); //子,s
}
}
例2. (3,7)
class Animal
{
public void eat(){
System.out.println("吃");
}
}
class Dog extends Animal
{
public void eat(){
System.out.println("我爱吃骨头");
}
public void say(){
System.out.println("汪汪汪")
}
class Cat extends Animal
{
public void eat(){
System.out.println("我唉吃鱼");
}
public void catMouse(){
System.out.println("我会捉老鼠");
}
}
class Test
{
public static void funEat(Animal a){
a.eat();
if (a instanceof Cat)
{
Cat c = (Cat)a;
c.catMouse();
}
}
public static void main(String[] args)
{
Cat c1 = new Cat();
funEat(c1);
Dog d = new Dog();
funEat(d);
}
}
程序测试
class A{
float var=1.1f;
float method(){ return var; }
}
class B extends A{
float var=2.2f;
float method(){ return var;}
}
若定义A a=new A(),则a.var和a.method()的值是多少?
1.1,1.1
若定义A a=new B(),则a.var和a.method()的值是多少?
1.1,2.2
若定义A a=new B(),B b=(B)a,则b.var和b.method()的值是多少?
2.2,2.2
分享到:
相关推荐
导入测序结果fastq文件,通过BWT,FL mapping找到对应在reference上的碱基位置,再经过alignment找出DNA 多态性,如mismatch,delete或insert。 使用code.pl生成sam文件,再用vcf.pl生成result
实验二:java多态性.rar实验二:java多态性.rar
java类和对象继承多态性 是JAVA的基础学习课件,有利于提高
Java多态性实验报告 1、编写一个名为“复数”的类,包含复数的实部和虚部(数据成员),以及复数之间的基本算术运算:加、减(方法成员),并要求复数加减运算,程序运行中能对给定的复数进行运算,并打印运算的结果....
Java多态性实验报告 1、编写一个名为“复数”的类,包含复数的实部和虚部(数据成员),以及复数之间的基本算术运算:加、减(方法成员),并要求复数加减运算,程序运行中能对给定的复数进行运算,并打印运算的结果...
java中多态性的体现与使用 方法的重写
关于java多态性和abstract修饰的使用 一个具体的实例 简单易懂
通过一个C++多态性案例,认识C++多态性
可以更清楚的了解java,帮助你认识java的多态性
java多态性.pdf
Java多态性探悉 .......推荐。、。
Java多态性浅析.pdf
C++课程-5_多态性 C++课程-5_多态性
Java多态性的实现.pdf
java多态性详解——父类引用子类对象
编程语言java多态性.pdf
对于JAVA多态性的理解是非常好的帮助,多态性是JAVA中常用的性质
C++中的多态性实例,包括静态多态性和动态多态性(运算符的重载和虚函数)
本文档在某知名网站下载,要么浏览量最多,要么最新,保证精品,至少为你节约3RMB。格式为caj或者kdh需要专业阅读器打开。