面向对象-多态

11 篇文章 0 订阅
5 篇文章 0 订阅

面向对象-多态

  • 多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。主要是指同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。说简单点,就是父类的同一种方法,可以在不同子类中表现出不同的状态,或者说在不同子类中可以实现不同的效果。而且在这个过程中因为是使用父类引用指向子类对象,所以不会涉及到子类特有的方法,只会调用父类中存在的方法。

  • 好处是可以把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,统一调用标准。

特点
  • 1、 多态的前提是继承——因为继承中存在方法的重写,首先在继承父类后,就可以继承父类的除私有方法外的所有方法,就可以对这些方法进行重写。

  • 2、 要有方法的重写——当有了可以重写父类方法的权限后,在不同的子类中就可以重写父类方法,实现自己不同的功能,当然也可以不重写,主要是重写这个功能使得每个子类都独具一格,不会全都相同,这是多态重要的一点。

  • 3、 父类引用指向子类对象,如:Animal a = new Dog(); ——小到大,向上转型。这里父类引用指向子类对象,其实相当于把子类对象当父类对象来用,所以这是一种向上转型的引用。

  • 4、 多态中,编译看左边,运行看右边——为什么这么说呢?其实主要是针对 Animal a = new Dog();这个语句而言,在编译时,首先加载的是父类的方法和变量,那么如果子类方法重写方法后,也会加载子类方法。执行看右边,这里主要的意思是在实现程序时,我有两个选择,当我的子类重写父类方法后,就会执行子类重写的方法 ,如果没有重写,那么就会执行父类中的方法。但是多态的特点就是重写。
    说简单点,就是方法加载以父类方法为主,方法执行以子类为主。

public class duotai {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建两个对象,分别是相同父类引用指向不同子类对象,并同时调用子类对象。
		fu z1 = new zi();
		fu z2 = new ziy();
		z1.eat();
		z2.eat();
		
	}
}
//创建一个父类fu,写一个方法
class fu{
	public void eat(){
		System.out.println("这是一个吃的方法");
	}
}
//创建子类zi,继承父类fu,对父类方法eat()重写,并加一个自己特有的方法xue();
class zi extends fu{
	public void eat(){
		System.out.println("这是对方法的重写,大儿子想吃面!");
	}
	public void xue(){
		System.out.println("这是子类特有的方法,学习");
	}
}
//创建子类ziy,继承父类fu,重写父类方法eat();
class ziy extends fu{
	public void eat(){
		System.out.println("这是 对父类方法的重写,小儿子想吃粉");
	}
}

运行结果如图:
在这里插入图片描述
父类引用对象调用子类特有方法时会出错:
在这里插入图片描述

优点
  • 1、 多态可以让我们不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法。

  • 2、 提高了程序的扩展性和可维护性

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值