JAVA基础之多态

多态

  • 定义:同一个对象体现出来的多种不同形态(身份)将同一种行为表现出不同的效果
  • 多态存在的3个必要条件:继承,重写,父类引用指向子类对象

多态的体现
  • 1.父类类型的引用指向子类的对象
    Person p = new Teacher();
  • 2.该引用只能调用父类中定义的属性或方法,子类独有的属性和方法调用不了
  • 3.如果子类中将父类的方法重写,那么调取方法后执行的结果是子类重写之后的那个结果,如果父类与子类有同名的属性,执行父类的属性如果父 类与子类有同名的方法,执行子类重写之后的方法
  • 4.如果想调用子类独有的属性和方法,需要做强制类型转换(向下转型)

转型
  • 从父类类型到子类类型(向下转型),从子类类型到父类类型(向上转型,JAVA可以帮我们尝试自动转型)
  • 转型时(强制向下转型时)如果类型不匹配会出现转型异常,java.lang.ClassCastException,编译时不会报错,运行时才报错,如果想要避免造型的异常可以用instanceof关键字来进行判断,
    对象 instanceof 类,判断对象是否是这个类或其子类的实例化
  • 如果创建的原始对象是父类类型,不能向子类强转
  • 如果创建的原始对象是子类类型,可以向父类强转
  • 如果你不强转,java会自动从子类类型向父类转型
  • 如果你不强转,java不会自动从父类类型向子类转型,根本就转不了,在编译语法阶段就出错
  • 从子类转向父类,会隐藏子类的一部分身份

//父类
public class Person {
	public void eat() {
		System.out.println("人类吃饭");
	}
}

//子类1
public class Man extends Person{
	public void eat () {
		System.out.println("男人吃饭");
	}
}
//子类2
public class Woman extends Person{
	public void eat() {
		System.out.println("女人吃饭");
	}
}
//测试1
public class test {
	public static void main(String[] args) {
		Person p = new Man();
		p.eat();
	}
}
//测试结果:男人吃饭
//测试2
public class test {
	public static void main(String[] args) {
		Person p = new Woman();
		p.eat();
	}
}
//测试结果:女人吃饭
  • 拓展使用,当需要改变某个已经存在的功能时,只需要改变指向的子类对象即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值