当前位置: 首页 > 编程笔记 >

Java基础之方法重写和多态示例

路和悌
2023-03-14
本文向大家介绍Java基础之方法重写和多态示例,包括了Java基础之方法重写和多态示例的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了Java基础之方法重写和多态。分享给大家供大家参考,具体如下:

示例代码:

子类的方法与父类的方法具有相同的返回类型和签名,子类方法重写父类方法。

class A{
  int i,j;          //父类变量
  A(int a,int b){    //父类构造
    i=a;
    j=b;
  }
  void show(){     //父类方法
    System.out.println(i+"  "+j);
  }
}
class B extends A{   //继承父类
  int k;             //子类变量
  B(int a,int b,int c){  //子类构造
    super(a,b);     //调用父类构造
    k=c;
  }
  void show(){     //子类方法重写父类方法,会隐藏父类方法
    System.out.println(i+"  "+j);
  }
  void show(String msg){   //子类方法,重载父类方法(方法签名不同,称为重载)
    //super.show();         //显示调用父类方法
    System.out.println(msg+k);
  }
}
class Override{
  public static void main(String[] args){
    B b=new B(1,2,3);
    b.show("This is k: ");
    b.show();
  }
}

多态:父类对象可以引用子类对象,引用不同对象造成不同结果,称为多态。

class Sup{          //父类
  void who(){
    System.out.println("Sup");
  }
}
class Sub1 extends Sup{     //子类
  void who(){
    System.out.println("Sub1");
  }
}
class Sub2 extends Sup{    //子类
  void who(){
    System.out.println("Sub2");
  }
}
class DynDispDemo{
  public static void main(String[] args){
    Sup sup=new Sup();      //父类对象
    Sub1 sub1=new Sub1();  //子类对象
    Sub2 sub2=new Sub2();  //子类对象
    Sup supf;    //父类对象
    supf=sup;   //父类对象引用父类对象
    supf.who(); //调用父类方法
    supf=sub1; //父类对象引用子类对象
    supf.who(); //调用子类方法
    supf=sub2; //父类对象引用子类对象
    supf.who(); //调用子类方法
  }
}

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

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

 类似资料:
  • 问题内容: 让我们看一下这个简单的Java代码: 我试图找出三个eat()方法的哪个版本。现在,当我键入 输出是“一般动物食用”,这是完全可以理解的。 当我键入以下内容时,会发生相同的事情: 输出是“吃干草的马”,这完全是合乎逻辑的。 这就是让我感到困惑的地方。当我键入: 我得到: 我希望编译器从Animal类引用而不是Horse对象引用中调用eat()方法。 所以我的问题是,当我有一个引用对象类

  • 让我们用这个简单的Java代码: 我试图找出这三个ate()方法的哪个版本将运行。现在,当我键入 结果是“普通动物一般地吃”,这是完全可以理解的。 当我输入时也会发生同样的事情: 结果是“吃干草的马”,这也是完全合乎逻辑的。 这就是我困惑的地方。当我输入: 我得到: 我期望编译器从动物类引用调用ate()方法,而不是马对象引用。 所以我的问题是,当我有一个泛型引用变量类型引用一个对象类型时(比如:

  • 什么是静态类型?它们为什么有用? 按Pierce的话讲:“类型系统是一个语法方法,它们根据程序计算的值的种类对程序短语进行分类,通过分类结果错误行为进行自动检查。” 类型允许你表示函数的定义域和值域。例如,从数学角度看这个定义: f: R -> N 它告诉我们函数“f”是从实数集到自然数集的映射。 抽象地说,这就是 具体 类型的准确定义。类型系统给我们提供了一些更强大的方式来表达这些集合。 鉴于这

  • 问题内容: 昨天我接受了两个小时的技术电话面试(我通过了,woohoo!),但是我完全想出了以下有关Java动态绑定的问题。令人困惑的是,几年前我曾当过助教时曾向大学生教授这一概念,所以我给他们提供错误信息的前景有点令人不安… 这是给我的问题: 我断言输出应该是覆盖方法中的两个单独的打印语句:和。后一种情况是显而易见的,而在前一种情况下,即使t1具有Object类型的引用,也将其实例化为Test类

  • 我试图理解重载和重写静态和非静态方法是如何工作的。事实上,我试图理解这些方法如何能够和不能出现在父类和子类中。我想出了下面的规则: 我们不能重写静态方法,只能隐藏它们。通过隐藏,我们的意思是在编译时根据引用变量类型决定执行哪个方法,而不是重写(,在运行时根据实例类型选择哪个方法执行)。 例如,让,然后隐藏. 我们可以重写实例方法。 例如重写. 两个或多个具有相同签名的方法不能以静态或非静态组合形式

  • 问题内容: 这是我遇到的一个测试练习问题,希望您能帮助我理解概念 让Hawk成为Bird的子类。假设某个类有两个重载的方法void foo(Hawk h)和void foo(Bird b)。在声明Bird x = new Hawk()之后,将在调用foo(x)中执行哪个版本; 这是我到目前为止的代码,有人可以向我解释为什么foo(bird b)被执行吗? 问题答案: Java执行重载解析以选择方法