重温java多态

Java多态的实现机制是什么?

表示当同一个操作作用在不同对象时,会有不同的语义,从而产生不同的结果,例如,同样执行“+”操作,“3+4”用来实现整数相加,而“3”+"4"却实现了字符串的连接。

在Java中提供了俩种用于多态的机制:编译时多态运行时多态。

编译时多态是通过方法的重载实现的,运行时多态是通过方法的覆盖(子类覆盖父类方法)实现的

方法的重载(overload)

重载是指同一个类中有多个同名的方法,但这些方法有着不同的参数,因此在编译时就可以确定到底调用哪个方法,它是一种编译时多态。重载可以被看作一个类中的方法多态性。
注意面试笔试时:重载只能是方法名相同&&1、参数个数不同  2、参数类型不同 二者包含1个或同时具备
方法的返回类型、访问权限、抛出的异常类型不同不纳入重载的考虑范围内,因为编译时实际上方法的加载如下例所示:public void add(int a,int b)-----> add (@int ,@int)
public void add(float a , float b)---->add(@float,@float)
public int add(int a ,int b)------>add(@int , @int)与第一个相同

方法的覆盖(override)

子类可以覆盖父类的方法,因此同样的方法会在父类与子类中有着不同的表现形式。在Java语言中,基类的引用变量不仅可以指向基类的实例对象,也可以指向其子类的实例对象。同样,接口的引用变量也可以指向其实现类的实例对象。而程序调用的方法在运行期才动态绑定(绑定指的是将一个方法调用和一个方法主体连接到一起),就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。通过这种动态绑定的方法实现了多态。由于只有在运行时才能确定调用哪个方法,因此通过方法覆盖丝线的多态也可以成为运行时多态

例子
package com.txr.Socket;

class Base{
	public Base()
	{
		g();
	}
	public void f()
	{
		System.out.println("Base f()");
	}
	public void g()
	{
		System.out.println("Base g()");
	}
}
class Derived extends Base{
	public void f()
	{
		System.out.println("Derived f()");
	}
	public void g()
	{
		System.out.println("Derived g()");
	}
}

public class Test {
	public static void main(String[] args) {
		Base b=new Derived();
		b.f();
		b.g();
	}
}
输出结果:
Derived g()
Derived f()
Derived g()
在上例中,由于子类Derived的g,f方法与父类同名,因此覆盖父类的方法,在执行
Base b=new Derived();
时会调用Base类的构造方法,执行g()方法,由于Java语言的多态特性,因此会调用子类的g()方法,而实际创建的类是Derived类的对象,后面的方法调用也会调用子类的方法

但需注意:只有类中的方法才有多态的概念,类中成员变量没有多态的概念,看如下例子
package com.txr.Socket;

class Base{
	public int i=1;
}
class Derived extends Base{
	public int i=2;
}

public class Test {
	public static void main(String[] args) {
		Base b=new Derived();
		System.out.println(b.i);
	}
}
输出结果:
1
由此可见,成员变量是无法实现多态的,成员变量得值取父类的还是子类的取决于声明成员变量得类型,这是在编译期间确定的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值