Java Method Overriding --- runtime polymorphism ! not overloading

ref: http://www.studytonight.com/java/method-overriding-in-java.php                    

Method Overriding between parent and child

The key benefit of overriding is the ability to define method that‘s specific to a particular subclass type

class Animal
{
 public void eat()
 {
  System.out.println("Generic Animal eating");
 }
}

class Dog extends Animal
{
 public void eat()   //eat() method overriden by Dog class.
 {
  System.out.println("Dog eat meat");
 }
}

The subclass will implement the method again. As the example shows. the Dog clss gives its own implementation of eat(). Method must have the same signature

Static method cannot be overriden.

Covariant return type

Since Java 5, it is possible to override a method by changing its return type, If subclass override any method by changing the return type of super class method,

then the return type of overriden method must be subtype of return type declared in origin method inside the super class. this is the only way by which method can be overriden by chancing its return type.

class Animal
{
 Animal myType()
 {
  return new Animal();
 }
}

class Dog extends Animal
{
 Dog myType()     //Legal override after Java5 onward
 {
  return new Dog();
 }
}

Dog is a sub type of animal, therefore different return type is ok here

Difference between Overloading and Overriding

Method Overloading Method Overriding
Parameter must be different and name must be same. Both name and parameter must be same.
Compile time polymorphism. Runtime polymorphism.
Increase readability of code. Increase reusability of code.
Access specifier can be changed. Access specifier most not be more restrictive than original method(can be less restrictive).                                                                                             
时间: 2024-12-23 01:01:31

Java Method Overriding --- runtime polymorphism ! not overloading的相关文章

Java中Overriding和Overloading的区别

override和overload的区别   方法重载 (1)方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载Overloading是一个类中多态性的一种表现. (2)Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义.调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3)重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相

2.Java基础之Runtime对象

毕向东老师Java基础学习笔记——Runtime对象 今天学习Java中的Runtime对象后,感觉这个对象对我们主要有以下几点用处. 1.使用java代码打开本地可执行文件,比如打开一个计算器. 2.打开一个程序,并用该程序打开一个支持的文件. 比如:1.打开记事本,用记事本打开*.java文件, 2.打开暴风影音播放器,用播放器打开一个本地视频. 范例代码如下: /************************************** Runtime对象: 1.该类并没有提供构造函数.

Calling a Java Method from Native Code

http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html Calling Java Methods This section illustrates how you can call Java methods from native methods. Our example program, Callbacks.java, invokes a native method. The native

Error: Could not find the required version of the Java(TM) 2 Runtime Environment in'(null)'.

Error: Could not find the required version of the Java(TM) 2 Runtime Environment in'(null)'. 安装Java EE JDK 7 报错 安装SDK之前,必须先安装JRE,而且还必须是32位的. 安装JDK之前居然要安装JRE!64位系统上必须先安装32位的JRE,安装64位的JRE不行! Error: Could not find the required version of the Java(TM) 2

Java Method的invoke委托

Java Method的invoke委托 @author ixenos Class对象运行时构造并委托调用方法(Method类) 0.由Class对象动态构造对应类型对象 1.Class对象的getMethod方法,由方法名和形参构造Method对象 2.Method对象的invoke方法来委托动态构造的对应类型对象,使其执行对应形参的add方法 //动态构造InvokeTest类的实例Class<?> classType = InvokeTest.class; Object invokeTe

Java中使用Runtime和Process类运行外部程序

在编写Java程序时,有时候我们需要调用其他的诸如exe,shell这样的程序或脚本.在Java中提供了两种方法来启动其他程序: (1) 使用Runtime的exec()方法 (2) 使用ProcessBuilder的start()方法 Runtime和ProcessBulider提供了不同的方式来启动程序,设置启动参数.环境变量和工作目录.但是这两种方法都会返回一个用于管理操作系统进程的Process对象. 使用Runtime.getRuntime().exec()方法可以在java程序里运行

Mac下打开eclipse 始终提示 你需要安装Java SE 6 Runtime

Mac下打开eclipse 始终提示 你需要安装Java SE 6 Runtime        周银辉 我的mac os 版本是10.9.2,  JDK配置得好好的,但打开eclipse时还是提示需要安装JRE 6.解决方法如下: 打开/Library/Java/JavaVirtualMachines/jdkXXXXX.jdk/Contents/Info.plist 按照如下配置,然后重启计算机. <key>JVMCapabilities</key> <array>

update Yosemite ,prompt &quot; * you need to install the legacy Java SE 6 Runtime&quot;

解决方案: 我是安装的是jdk1.8.45,打开Charles提示"To open Charles you need to install the legacy Java SE 6 Runtime" 1.下载apple官网提供的jdk1.6安装,安装后可以正常使用,下载链接如下: https://support.apple.com/kb/DL1572?locale=en_US 2.如果还想使用jdk1.8,可以设置环境变量解决这个问题: 1.打开终端收入:sudo  vim /etc/

单例模式的Java代码体现Runtime类(JDK提供的类)

Runtime类的源代码部分如下: /*Runtime类的部分源代码,给别人吹牛的小资本 *public class Runtime{ * private Runtime(){} * private static Runtime currentRuntime = new Runtime(); * public static Runtime getRuntime(){ * return currentRuntime; * } * } */ //设计模式(单例模式的Java代码体现Runtime类)