个人对多态的理解

多态的官方定义:

  • 即同一方法可以根据发送对象的不同而采用多种不同的行为方式
  • 一个对象的实际类型是确定的,但可以指向对象的引用类型有很多(父类,有关系的类)

父类

public class Person01 {

	public void run(){
		System.out.println("Person01");
	}
}

子类

public class Student01 extends Person01{

	@Override
	public void run(){
		System.out.println("Student01");
	}

	public void eat(){
		System.out.println("eat");
	}
}

主方法

public class Application01 {
	public static void main(String[] args) {
		// Studet01 能调用的方法都是自己的或者继承父类的
		Student01 s1 = new Student01();
		// Person01 父类型:可以指向子类,但不能调用子类独有的方法
		Person01 s2 = new Student01();
		Object s3 = new Student01();

		// 对象能执行哪些方法,主要看对象左边的类型,和右边的关系不大
		s1.run();
		s2.run(); // 子类重写了父类的方法,执行子类的方法
//		s2.eat(); // 报错了,父类没有eat()方法
	}
}

注意:静态方法static是和类一起加载出来的,不能被重写。多态只在继承关系中才存在。

Person01 s2 = new Student01(); s2.run(); 如果子类中没有run方法则会执行父类的run方法(因为父类的所有非私有方法,子类都可以调用),如果子类重写了父类的run方法,则这个实例化会执行子类的run方法,实际上对象能执行哪些方法,主要看对象左边的类型,和右边的关系不大;就比如父类中没有eat方法,如果用s2调用eat方法则会报错。
总之一句话
我认为多态实际上就是父类型指向子类,如果子类没有重写,则使用父类的方法,重写了就调用子类的方法,这样应该在实际开发中会方便许多,可以省下很多操作,详细理解可能要在实际开发中才能知道了。

多态注意事项:

  1. 多态是方法的多态,属性没有多态
  2. 父类和子类,有联系才能用多态 否则类型转换异常! ClassCastException!
  3. 存在条件: 继承关系,方法需要重写,父类引用指向子类对象! father f1 = new Son();

不可被重写情况:

  1. static 方法,属于类,它不属于实例
  2. final 形容的是常量,不可被重写
  3. private方法(私有的)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值