多态...

多态性一

多态在java中的两种体现:

1.方法的重载和重写.

重载(本类中的同名方法:体现相同的名称方法实现不同的逻辑)

重写(子类对父类方法的覆盖:子类可以使用和父类相同的方法名,覆盖掉父类的逻辑)

如:子类的方法想修改逻辑但是有其他的子类在使用父类的方法;可以考虑子类继承父类;重写父类方法;

2.对象的多态性–可以直接应用在抽象类和接口上.

java引用变量两个类型:

编译时类型:

由声明该变量时使用的类型决定,

运行时类型

由实际赋给该变量的对象决定;

(对象的多态)若编译时类型和运行时类型不一致就出现多态(polymorphism);

多态性二:

对象的多态

子类的对象可以代替父类的对象使用;

一个变量只能确定一个数据类型

一个引用类型变量可能指向多个不同类型的对象;

子类可以看做是一个特殊的父类;所以父类类型的引用可以指向子类的对象:向上转型;

	      review b =new review();
	      test a=new test();
	      //以上是正常情况
	      review e=new test();
	      //父类的引用对象可以指向子类的实例






	review a=new review();//这里的引用对象a指向了两个实例对象
	      a=new test();//且没有报错;这就是对象的多态 一个引用类型变量可能指向多个不同类型的对象;

多态性三:

一个引用类型变量如果生命为父类的类型,但是实际引用的是子类对象,那么该变量就不能再访问子类中添加到的属性和方法

	      a.show();
	 test a=new test();
	 a.banji="1";
	 review e=new test();
	 e.banji="1";//编译报错我的review没有班级这个属性
	 //因为test已经向上转型为test
    //属性是在编译的时候确定的 
	 //编译时e为review类型 没有banji的成员变量因而编译错误

虚拟方法调用:

	test a=new test();
	a.show();//这个是调用子类方法
	review b= new review();
	b.show();//这是调用父类方法
	//这两个都是正常调用
	
	
	review e= new test();
	e.show(); 
	//此时e打印的为子类和之前的 编写属性不一样 编译时e为review类
	//而方法是在运行时调用的所以调用的是student类的show方法
	//这个叫动态绑定

多态小结

前提:

存在继承或者实现的关系

要有覆盖操作(子类可以重写父类方法)

成员方法:

编译时:要查看引用所属的类中是否有调用方法。

运行时:调用实际对象所属的类中的重写方法。

成员变量:

不具备多态性,只看引用变量所属的类;

instanceof 操作符;

检验 x是否为类a的对象 返回值为Boolean型;

	 review b =new review();
     test a=new test();
     //检测a 属不属于 review这个类;返回值为 boolean类型
     System.out.println(a instanceof review);
     //就是检验某个对象是不是某个类的子类;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值