Java学习-------多态

1.多态的意义:
1)同一类型的引用指向不同的对象时
----行为多态

public static void main(String[] args){
	Person i = new Person();
	Person o = new barber();
	Person p = new doctor();
	o.cut();//理发师的剪头发行为
	p.cut();//演员的演戏行为
}
abstract class Person{
	abstract void cut();
}
class barber extends Person{
	public void cut(){
	System.out.println("剪头发");
}
}
class doctor extends Person{
	public void cut(){
	System.out.println("手术刀裁剪");
	}
}
/**
在超类中有个抽象cut方法,可以理解为人的cut行为,在不同职业中cut的意思也不
同,在理发师中,cut作为动词是剪头发的动作,在医生职业cut就是由手术刀或者其
他进行手术,他们的施法者都是人,也就是超类,是同一类型,对象不同。*/

2)同一对象被造型为不同类型时,有不同功能
----对象的多态

public static void main(String[] args){
		water w = new water();
		liquidWater o = w;
		solidWater p = w;
		o.effect();
		p.function();
	}
}
interface solidWater{
	void function();
}
abstract class liquidWater{
	abstract void effect();
}
class water extends liquidWater implements solidWater{
	public void effect(){
		System.out.println("液态水可以喝");
	}
	public void function(){
		System.out.println("固态水是冰块,作用很多");
	}
/**水可以作为一个对象,但他可以有多种形态,分别被造型为液态水和固态水,那么他们的引用o,p就可以点出他们的方法,也就是作用。*/

抽象方法都是多态,Java中凡是对象都是多态的
3)向上造型:将一个父类的引用指向一个子类的对象,此时通过父类引用调用的方法(引用变量点出来的方法)是子类覆盖或继承父类的方法,不是父类的方法。 此时通过父类引用变量无法调用子类特有的方法
3.1)超类型的引用指向派生类对象
3.2)能造型成为的类型有:超类+所实现的接口
3.3)能点出来什么,看引用类型。

向下造型:如果父类要调用子类的特有方法就得将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型,此时必须进行强制类型转换。
::父类用子类的特有方法,这时向下造型,必须强制类型转换。

4)强制类型转换,成功的条件只有如下两种:
4.1)引用所指向的对象就是该类型
4.2)引用所指向的对象,实现了该接口或者继承的类

父类的引用就可以使用子类的方法

5)强转时若不符合如上两个条件,则会发生ClassCastExcption类型转换异常
6)在进行类型转换之前“instanceof”操作符可以检测是否成功的转换

public class MutilTypeDemo {

	public static void main(String[] args) {
	TQQ o = new YQQ();
	YQQ o1 = (YQQ)o;//o所指向的对象就是YQQ类型
	Inter1 o2 = (Inter1)o;//o所指向的对象YQQ是实现Inter1的接口
	//UQQ o3 = (UQQ)o;//ClassCastException
	System.out.println(o instanceof YQQ);//true
	if(o instanceof UQQ) {
		UQQ o3 = (UQQ)o;
	}else {
		System.out.println("没有转换成功");
	}
	}

}
interface Inter1{}
class TQQ{}
class YQQ extends TQQ implements Inter1{}
class UQQ extends TQQ{}

强转一定是和instanceof一起!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值