精华内容
下载资源
问答
  • java多态性

    2021-03-13 10:23:57
    java多态性java多态性1、实验内容或题目(1) 定义一个抽象基类Shape,它包含一个抽象方法getArea(),从Shape类派生出Rectangle和Circle类,这两个类都用getArea()方法计算对象的面积。编写编写应用程序使用Rectangle...

    java多态性

    java多态性

    1、 实验内容或题目

    (1) 定义一个抽象基类Shape,它包含一个抽象方法getArea(),从Shape类派生出Rectangle和Circle类,这两个类都用getArea()方法计算对象的面积。编写编写应用程序使用Rectangle类和Circle类。

    (2) 定义一个接口ClassName,接口中只有一个抽象方法getClassName()。设计一个类Horse,该类实现接口ClassName中的方法getClassName(),功能是获取该类的类名。编写应用程序使用Horse类。

    (3) 定义接口myItfc,接口中只有一个名为area的方法,该方法有一个double类型参数,返回类型也为double。编写一个应用程序,并实现接口myItfc,接口中area方法的实现是返回参数的立方值;在应用程序中调用该方法并输出其结果。

    (4) 编写小程序,在小程序窗口中显示字符串“java程序设计”,按下键盘上的箭头键,可按照箭头方向移动(提示:得到键盘键代码的方法是e.getKeyCode(),上、下、左、右键的编码分别用常量VK_UP 、VK_DOWN 、VK_LEFT 、VK_RIGHT表示)。

    2、实验目的与要求

    ⑴ 多态性。

    ⑵ 接口的定义和实现接口。

    ⑶ 内部类、匿名内部类对象的的编写和使用。

    3、 实验步骤与源程序

    ⑴ 实验步骤

    编辑源文件,可用Jcreater或EditPlus 2软件编辑

    编译,若编译成功,则进入运行,进入DOS下运行 javac  XX.java;若不成功,则返回编辑源文件

    运行文件java  XX   或appletviewer  XX.htm等

    ⑵ 源代码

    题目一:

    public class UseAbstract

    {

    public static void main(String[] args)

    {

    Shape rec =new Rectangle(4,7);

    Shape cir = new Circle(8);

    System.out.println("长方形的面积:"+rec.getArea());

    System.out.println("圆的面积:"+cir.getArea());

    }

    }

    abstract class Shape

    {

    public abstract double getArea();

    }

    class Rectangle extends Shape

    {

    double d,w;

    public Rectangle(double d,double w)

    {

    this.d=d;

    this.w=w;

    }

    public double getArea()

    {

    return d*w;

    }

    }

    class Circle extends Shape

    {

    double r;

    public Circle(double r)

    {

    this.r=r;

    }

    public double getArea()

    {

    return Math.PI*r*r;

    }

    }

    题目二:

    interface ClassName

    {

    public abstract void getClassName();

    }

    class Horse implements ClassName

    {

    public void getClassName()

    {

    System.out.println("该类名为:Horse");

    }

    }

    public class UseInterface

    {

    public static void main(String[] args)

    {

    Horse h =new Horse();

    h.getClassName();

    }

    }

    题目三:

    public class Test

    {

    public static void main(String[] args)

    {

    A a=new A();

    System.out.println(a.area(6));

    }

    }

    interface myItfc

    {

    public double area (double a);

    }

    class A implements myItfc

    {

    public double area (double a)

    {

    return a*a*a;

    }

    }

    题目四:

    import java.awt.*;

    import java.applet.*;

    import java.awt.event.KeyEvent;

    import java.awt.event.KeyListener;

    public class AppMove extends Applet implements KeyListener{

    int x=200,y=100;

    public void paint(Graphics g) {

    g.drawString("Welcome to Java!!", x, y );

    }

    public void init()

    {

    addKeyListener(this);

    }

    public void keyPressed(KeyEvent e){

    if(e.getKeyCode()==KeyEvent.VK_UP)

    y-=3;

    else if(e.getKeyCode()==KeyEvent.VK_DOWN)

    y+=3;

    else if(e.getKeyCode()==KeyEvent.VK_LEFT)

    x-=3;

    else if(e.getKeyCode()==KeyEvent.VK_RIGHT)

    x+=3;

    repaint();

    }

    public void keyReleased(KeyEvent e){

    }

    public void keyTyped(KeyEvent e){

    }

    }

    4、 测试数据与实验结果(可以抓图粘贴)

    题目一:

    题目二:

    题目三:

    题目四:

    5、 结果分析与实验体会

    本次实验是java程序语言设计的第六次实验了,这六次实验对我们的非常重要,有助于帮助我们理解java程序设计语言。

    实验还是4题。第一题是定义一个抽象基类Shape,用getArea()方法计算对象的面积。第二题是设计一个类Horse,获取该类的的类名。第三题编写一个应用程序,并实现接口myItfc,接口中area方法的实现是返回参数的立方值;在应用程序中调用该方法并输出其结果。第四题做的是显示字符串“java程序设计”,按下键盘上的箭头键,可按照箭头方向移动。这四道题目与以前做的大致相同。

    java课程学习已经接近了尾声。在这一个学期不到的时间内,我们学习到了java程序语言设计。Java 程序设计与以前我们学过的C\C++有许多的类似之处。所以也能较好的理解这门课程,做实验是为了将我们书本上学到的知识转化为实际的操作经验,能动手编程、调试,是与我们学校给我们定义技术型本科相符合的。我们现在要做好java程序设计的期末复习工作,更好的学习和掌握这门课程。379

    展开全文
  • 看过一些关于Java多态性的文章,参考了很多人的理解,加入了一些自己的看法,整理出来供大家参考,不一定完全正确,欢迎大家批评指正。(一)相关类classA...{publicStringshow(Dobj)...{return("AandD");}...

    看过一些关于Java多态性的文章,参考了很多人的理解,加入了一些自己的看法,整理出来供大家参考,不一定完全正确,欢迎大家批评指正。

    (一)相关类

    classA ...{

    publicString show(D obj)...{

    return("A and D");

    }

    publicString show(A obj)...{

    return("A and A");

    }

    }

    classBextendsA...{

    publicString show(B obj)...{

    return("B and B");

    }

    publicString show(A obj)...{

    return("B and A");

    }

    }

    classCextendsB...{}

    classDextendsB...{}

    (二)问题:以下输出结果是什么?

    A a1 =newA();

    A a2 =newB();

    B b =newB();

    C c =newC();

    D d =newD();

    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

    (四)分析

    ①②③比较好理解,一般不会出错。④⑤就有点糊涂了,为什么输出的不是"B and B”呢?!!先来回顾一下多态性。

    运行时多态性是面向对象程序设计代码重用的一个最强大机制,Java多态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制。

    方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中Java多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

    当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。 (但是如果强制把超类转换成子类的话,就可以调用子类中新添加而超类没有的方法了。)

    好了,先温习到这里,言归正传!实际上这里涉及方法调用的优先问题 ,优先级由高到低依次为:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。让我们来看看它是怎么工作的。

    比如④,a2.show(b),a2是一个引用变量,类型为A,则this为a2,b是B的一个实例,于是它到类A里面找show(B obj)方法,没有找到,于是到A的super(超类)找,而A没有超类,因此转到第三优先级this.show((super)O),this仍然是a2,这里O为B,(super)O即(super)B即A,因此它到类A里面找show(A obj)的方法,类A有这个方法,但是由于a2引用的是类B的一个对象,B覆盖了A的show(A obj)方法,因此最终锁定到类B的show(A obj),输出为"B and A”。

    再比如⑧,b.show(c),b是一个引用变量,类型为B,则this为b,c是C的一个实例,于是它到类B找show(C obj)方法,没有找到,转而到B的超类A里面找,A里面也没有,因此也转到第三优先级this.show((super)O),this为b,O为C,(super)O即(super)C即B,因此它到B里面找show(B obj)方法,找到了,由于b引用的是类B的一个对象,因此直接锁定到类B的show(B obj),输出为"B and B”。

    按照上面的方法,可以正确得到其他的结果。

    问题还要继续,现在我们再来看上面的分析过程是怎么体现出蓝色字体那句话的内涵的。它说:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。还是拿a2.show(b)来说吧。

    a2是一个引用变量,类型为A,它引用的是B的一个对象,因此这句话的意思是由B来决定调用的是哪个方法。因此应该调用B的show(B obj)从而输出"B and B”才对。但是为什么跟前面的分析得到的结果不相符呢?!问题在于我们不要忽略了蓝色字体的后半部分,那里特别指明:这个被调用的方法必须是在超类中定义过的,也就是被子类覆盖的方法。B里面的show(B obj)在超类A中有定义吗?没有!那就更谈不上被覆盖了。实际上这句话隐藏了一条信息:它仍然是按照方法调用的优先级来确定的。它在类A中找到了show(A obj),如果子类B没有覆盖show(A obj)方法,那么它就调用A的show(A obj)(由于B继承A,虽然没有覆盖这个方法,但从超类A那里继承了这个方法,从某种意义上说,还是由B确定调用的方法,只是方法是在A中实现而已);现在子类B覆盖了show(A obj),因此它最终锁定到B的show(A obj)。这就是那句话的意义所在,到这里,我们可以清晰的理解Java的多态性了。

    展开全文
  • 本文实例讲述了Java面向对象程序设计多态性。分享给大家供大家参考,具体如下:多态:具有表现多种形态的能力的特征(同一个实现接口,使用不同的实例而执行不同的操作)实现多态的优点:为了方便统一调用!实现多态的三种...

    本文实例讲述了Java面向对象程序设计多态性。分享给大家供大家参考,具体如下:

    多态:具有表现多种形态的能力的特征(同一个实现接口,使用不同的实例而执行不同的操作)

    实现多态的优点:为了方便统一调用!

    实现多态的三种方式!

    1. 子类到父类的转换:

    例:

    Dog dog=new Dog("欧欧","雪纳瑞");

    dog.eat();

    Pet pet=new Dog("欧欧","雪纳瑞");//子类到父类的转换

    pet.eat();

    pet.catchingFlyDisc();//编译错误,父类的引用无法调用子类的特殊方法

    规则:

    ① 将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换

    ② 此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法.

    ③ 此时通过父类引用变量无法调用子类特有的方法!

    2. 使用父类作为方法形参实现多态

    public class Master

    {

    private String name = "";

    private int money = 0;

    public Master(String name, int money) {

    this.name = name;

    this.money = money;

    }

    public void feed(Pet pet) {

    pet.eat();

    }

    public void feed(Dog dog) {

    dog.eat();

    }

    public void feed(Penguin pen) {

    pen.eat();

    }

    }

    public class Test()

    {

    public static void main(String[] args) {

    Master master = new Master("王先生", 100);

    Pet pet = new Dog("欧欧", "雪纳瑞");

    master.feed(pet);

    }

    }

    3. 使用父类作为方法返回值实现多态

    public class Master{

    private String name = "";

    private int money = 0;

    public Pet getPet(int id)

    {

    Pet pet=null;

    if(id==1)

    {

    pet=new Dog("欧欧","雪纳瑞")

    }

    else if(id==2)

    {

    pet=new Penguin("娜娜","帝企鹅");

    }

    return pet;

    }

    }

    注意:

    ① 继承的存在(继承是多态的基础,没有继承就没有多态)

    ② 子类重写父类的方法

    ③ 父类引用变量指向子类对象

    希望本文所述对大家java程序设计有所帮助。

    展开全文
  • java中多态性的讲解

    2021-02-26 15:00:40
    多态具体表现在重写和重载多态就是类的多种表现方式比如方法的同名不同参子类重写父类方法的重写和重载是Java多态性的不同表现。重写是父类与子类之间多态性的一种表现。重载是一个类中多态性的一种表现。如果在子类...

    多态具体表现在重写和重载

    多态就是类的多种表现方式

    比如方法的同名不同参

    子类重写父类

    方法的重写和重载是Java多态性的不同表现。

    重写是父类与子类之间多态性的一种表现。

    重载是一个类中多态性的一种表现。

    如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 。

    子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。

    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载。

    并且重载的方法是可以改变返回值的类型的。

    应该能懂了吧

    …………我给你解释下多态的意思

    多态,我觉得它的作用就是用来将接口和实现分离开,改善代码的组织结构,增强代码的可读性。

    以下是我对多态的小结

    1. Java中除了static和final方法外,其他所有的方法都是运行时绑定的。在我另外一篇文章中说到private方法都被隐式指定为final 的,因此final的方法不会在运行时绑定。当在派生类中重写基类中static、final、或private方法时,实质上是创建了一个新的方法。

    2.在派生类中,对于基类中的private方法,最好采用不同的名字。

    3.包含抽象方法的类叫做抽象类。注意定义里面包含这样的意思,只要类中包含一个抽象方法,该类就是抽象类。抽象类在派生中就是作为基类的角色,为不同的子类提供通用的接口。

    4.对象清理的顺序和创建的顺序相反,当然前提是自己想手动清理对象,因为大家都知道Java垃圾回收器。

    5.在基类的构造方法中小心调用基类中被重写的方法,这里涉及到对象初始化顺序。

    6.构造方法是被隐式声明为static方法。

    7.用继承表达行为间的差异,用字段表达状态上的变化。

    为了给你讲明白,我再给你写端例子

    /**

    * 定义一个基类

    */

    public Class Parents {

    public void print() {

    System.out.println(“parents”);

    }

    }

    /**

    * 定义两个派生类

    */

    public Class Father extends Parents {

    public void print() {

    System.out.println(“father”);

    }

    }

    public Class Mother extends Parents {

    public void print() {

    System.out.println(“mother”);

    }

    }

    /**

    * 测试输出结果的类

    */

    public Class Test {

    public void find(Parents p) {

    p.print();

    }

    public static void main(String[] args) {

    Test t = new Test();

    Father f = new Father();

    Mother m = new Mother();

    t.find(f);

    t.find(m);

    }

    }

    最后的输出结果分别是father和mother,将派生类的引用传给基类的引用,然后调用重写方法,基类的引用之所以能够找到应该调用那个派生类的方法,就是因为程序在运行时进行了绑定。

    转自:http://zhidao.baidu.com/link?url=e3nR9vKOdjXPLd_B5zNdic_o0VscrWZQYva67kSfO0R3ux4n2ragQIxmyZjKb0qcvN568wNZAPUso_Ml8S1He_

    展开全文
  • 多态性的优点多态性能够从一定程度上消除类型之间的耦合关系,通过统一接口方式,不同类的对象可以直接替换,程序更加灵活,可扩展。面向对象多态性存在的三个必要条件继承重写父类引用指向子类对象多态性的实现方式...
  • java什么是类的多态性

    2021-02-27 12:42:44
    1. 如果a是类A的一个引用,那么,a可以指向类A的一个实例,或者说指向类A的一个子类。...引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值...
  • 展开全部在面向对象的程序JAVA中,多态性的定义是:同一操作作用于不同的32313133353236313431303231363533e78988e69d8331333366306461类的实例,将产生不同的执行结果。对象根据所接受的消息而做出动作,同样的消息...
  • 运行时多态性是面向对象程序设计代码重用的一个最强大机制,Java多态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制...
  • Java多态性是什么?

    2021-02-28 18:31:40
    继承是为了重用父类代码,同时为实现多态性作准备。那么什么是多态呢?方法的重写、重载与动态连接构成多态性。Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来...
  • Java多态性举例说明

    2021-02-26 15:10:00
    Java多态性的概念也可以被说成“一个接口,多个方法”。(一)相关类classA...{publicStringshow(Dobj)...{return("AandD");}publicStringshow(Aobj)...{return("AandA");}}classBextendsA...{publicStringshow(Bobj)....
  • 对象的多态性:向上转型:程序会自动完成父类 父类对象 = 子类实例向下转型:强制类型转换子类 子类对象 = (子类)父类实例classA{publicvoidtell01(){System.out.println("A--tell01");}publicvoidtell02(){System....
  • 1.多态性的概念 多态性:向不同的对象发送同一个消息,不同的对象在接收时会产生不同 的行为。 静态多态性:由函数中在和运算符重载形成。 动态多态性:通过虚函数实现。 2.示例 先建立一个Point类,包含数据成员x,...
  • 多态性概述

    2021-05-20 19:17:32
    多态性多态性是面向对象程序设计的重要特性之一,从字面意思上可以简单理解就是:多种形态,多个样子。其实本质意思也是这样,在面向对象程序设计中,指同样的方法被不同对象执行时会有不同的执行效果。在具体来说,...
  • 姓名: 李小娜[嵌牛导读]: 运行时多态性是面向对象程序设计代码重用的一个最强大机制,动态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期...
  • 多态性允许以统一的风格编写程序,以处理种类繁多的已存在的类和相关类。这样既降低了维护的难度,又节省了时间。2.在java语言中,多态性体现在哪些方面方法重载: 通常是指在同一个类中,相同...
  • 实验八 多态性—类型转换与虚函数 目录 实验八 多态性—类型转换与虚函数 8.1 实验目的 8.2 实验内容 8.2.1程序阅读 8.2.2 程序设计 8.3思考题 8.1 实验目的 1.理解掌握运算符[]、()的重载; 2.理解类型...
  • 多态性是面向对象编程中四大特性之一,多态性是在继承性的基础上扩展出来的概念,可以实现父子类之间的转换处理。 在Java中主要有方法的多态性和对象的多态性。 方法的多态性:方法实现不同的功能 >>>...
  • Java面向对象设计主要有三大特征:封装性、继承性和多态性一 封装性1.1 概念:它是将类的一些敏感信息隐藏在类的类部,不让外界直接访问到,但是可以通过getter/setter方法间接访问。1.2 目的:我们可以并且有可能在...
  • 多态性含义 多态指相同语法结构,代表多种功能或操作 例如:X+Y X和Y都为整数类型:相加操作先以个位对齐,然后对应位相加 X和Y都为浮点类型:相加操作先以小数点对齐,然后对应位相加 当然+两边可以为不同类型也...
  • 运行时多态性是面向对象程序设计代码重用的一个最强大机制,动态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制,下面...
  • JAVA实验报告 多态性 实验三福建农林大学计算机与信息学院实验报告系: 专业:计算机科学与技术年级: 10计升(4)班姓名: 涂启标 学号: 102260013214 实验室号__514_____ 计算机号 30实验时间: 指导教师签字: ...
  • 文件有多种形态:文件、文本文件、可执行文件二 多态性(1)什么是多态性(注意:多态与多态性是两种概念)多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象...
  • 【单选题】表层海温是指从海面至水下深的海水温度?【选题】下列关于断裂线说法中正确的是()【单选题】两流体可作严格逆流的换热器是【单选题】《红楼梦》全书120回有( )回讲到茶【单选题】请问远程设备站在一个...
  • 【简答题】【选题】非经胃肠道给药的剂型是:【选题】除另有规定外,用药材比量法控制浸出制剂浓度的是:【判断题】【填空题】Java中规定,对于重写的方法,Java根据调用该方法的 来决定选择哪个方法。 (4.0分)【简答...
  • Java 语言多态性

    2021-02-12 09:33:36
    此文将演示如何使用 Java™ 语言实现多态性。有一些构建此文的视频和逐步操作说明。学习这些后,您就能使用 Java 语言在您的项目中实现多态性!前提条件Java 平台的基础知识面向对象概念的基础知识逐步介绍设置开发...
  • 深入理解java多态性

    2021-03-05 15:09:39
    引言:多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个...
  • PHP 对象 多态性

    2021-04-08 12:15:55
    PHP 对象 多态性发布时间:2020-05-21 05:08:59来源:51CTO阅读:207作者:津沙港湾/**多态特性*1.程序扩展准备*必须有继承关系,父类最好是接口或抽象类*///定义接口interfaceUSB{constWIDTH=12;constHEIGHT=3;...
  • C ++中的多态性

    2021-07-05 03:39:26
    虚拟功能函数名称重载运算符重载除了上述三种类型的多态性外,还存在其他种类的多态性:运行编译时间ad-hoc多态性参数多态性我知道运行时多态性可以通过虚函数来实现静态多态性可以通过模板函数实现但对于另外两个ad...
  • C++基础:什么是C++的多态性

    千次阅读 2020-12-28 18:50:10
    多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphisn),字面意思多种形状。 C++多态性是通过虚函数来实现的,虚函数允许子类重新定义...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 191,180
精华内容 76,472
关键字:

多态性程序