Java学习面向对象三特点之多态

多态的定义

定义: 即同一方法可以根据发送对象的不同而采用多做不同的行为方式。值得强调的是,一个对象的实际类型是确定的,但可以指向对象的引用的类型很多(父类,有关系的类)。
代码展示:
在Person父类中写入run();和eat();两个方法。
徐小磊
在Student类中继承Person类并重写父类的方法并且重写父类的方法。
在这里插入图片描述
在Test类运行在这里插入图片描述
运行结果
在这里插入图片描述

看运行结果可知在经过子类对父类方法的重写之后,并没有运行父类的方法,而是运行子类的方法,在上一章总结过了,对于方法的重写子类和父类的方法名必须相同。
有此可总结:
①Student 能够调用的方法都是自己或者继承父类的!
②Person 父类型,可以指向子类,但不可以调用子类独有的方法
③对象可以执行的方法看指向的类型,主要看对象左边的类型,和右边的关系不大!

多态存在的条件

封装、继承、多态是一次相互递进关系的,而多态是最后学的,所以多态是在封装和继承之后的知识。而多态存在的条件:
①类与类之间有继承关系
②子类重写父类方法
③父类引用指向子类对象
注意:多态是方法的多态,属性没有多态

instanceOf关键字

Java的一个关键字,右边是类,左边是对象,返回值类型是boolean类型。
object instanceof Student使用instanceof 关键字如果返回值是true,说明object 对象为 instanceof Student的实例对象;反之则不是。
代码展示

	public static void main(String[] args) {
//		Object >String
//		Object >Person>Student
		Object object = new Student();
		System.out.println(object instanceof Student);
		System.out.println(object instanceof Person);
		System.out.println(object instanceof Object);
		System.out.println(object instanceof String);
	}

当两个对象有关系的时候返回值就为true,将子类向父类转化。
这里总结一个公式 X instanceof Y ;如果编译为true着X,Y有父子类关系,反之没有。
在类之间进行转换,在有继承关系存在 子类直接转换为父类,不存在父类直接转换为子类,但是进行强转。在数据基础类型转换的时候我们学过double型转换为int型: double b = 46.5; int c = (int)b;这里我们知道在类与类之间也可以转换。在这里插入图片描述
但在Student里面写了一个go();方法,在使用Person的对象时候无法调用子类的方法。只能进行强转:

	Student student  = new Student();
		student.go();
		Person  person = new Person();
		((Student)person).go();

强转格式类似于基本数据类型转换:
((子类名)父类对象). 子类方法();
在基本数据类型转换的时候存在数据的丢失,同样在子类转换为父类可能会丢失子类本来的一些方法。

总结

1、多态总结

多态注意:
1、多态是方法的多态,属性没有多态。
2、父类和子类,有联系 类型转换异常! ClassCastException
3、存在条件:继承关系,方法需要重写,父类引用指向子类对象!
Father f1 = newSon();
对于一些不可以进行方法重写的是不存在多态。
1、static 方法,属于类,静态的,不属于实例。
2、final 常量:位于常量池里面。
3、private关键字修饰的方法。

2、instanceof总结

1、f父类引用子类的对象
2、把子类转换为父类,向上转型;
3、把父类转换为子类向下转型:强制转换
4、 好处:方便方法的调用,减少重复的代码;坏处:在强制转换过程会丢失一些子类的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值