多态知识整理&实现主人与宠物玩耍功能

1.为什么需要多态?

面想对象的三大基本特点特点封装、继承、多态。下面通过一个例子说明为什么需要多态。比如单词cut,在医生口中的意思是动手术,在导演口中意思是暂停,在理发师口中意思是剪头发。
总结:生活中,同一个动作在不同环境下表现出来的不同状态;Java中: 同一个方法在不同的对象中体现出来不同的状态;内存中: 父类引用指向子类对象
多态的实现的必要条件:

  • 1.存在继承关系
  • 2.存在方法重写
  • 3.父类引用指向子类对象
class Man {
   
	public void cut() {
   
		System.out.println("我是man, 我也不知道怎么cut");
	}
}

class Doctor extends Man {
   
	public void cut() {
   
		System.out.println("动手术");
	}
}

class Director extends Man {
   
	@Override
	public void cut() {
   
		System.out.println("暂停");
	}
}

class Hairdresser extends Man {
   
	@Override
	public void cut() {
   
		System.out.println("剪头发");
	}
}

现在创建一个对象

public class Duotaidemo01 {
   

	public static void main(String[] args) {
   
		Man m = new Doctor();
		m.cut();
		
		m = new Director();
		m.cut();
		
		m = new Hairdresser();
		m.cut();

	}
		//运行结果为
		动手术
		暂停
		剪头发

}

从一定角度来看,封装和继承几乎都是为多态而准备的。

2.多态访问成员的特点:

  • 成员变量: 编译时期看左边的类型,如果左边类型中没有变量,编译报错
    运行时期看左边类型,左边类型的变量的值就是运行的结果
    编译看左边,执行看左边
  • 成员方法:
    编译看左边,执行看右边
  • 构造方法:
    多态访问子类构造方法会先访问父类构造方法
    帮助子类初始化父类继承过来的成员
  • 静态方法:
    编译看左边,执行看左边
    看对象:Fu fu = new Zi();
class Fu {
   

	int num = 10;
	//父类成员方法
	public void method() {
   
		System.out.println("Fu.method()");
	}
	// 父类静态方法
	public static void show() {
   
		System.out.println("Fu.show");
	}
}

class Zi extends Fu {
   

	int num = 20;

	@Override
	//子类成员方法
	public void method() {
   
		System.out.println("Zi.method()");
	}
	// 子类静态方法
	public static void show() {
   
		System.out.println("Zi.show");
	}
	
}

创建一个子类对象 Zi

public class DuoTaiDemo02 {
   
	public static void main(String[] args) {
   
		Fu fu = new Zi();
		System.out.println(fu.num); // 10
		fu.method();//Zi.method()
		
		fu.show();//Fu.show
	}
}

3.多态的有点&例题

  • 多态的优点
    1.简化了代码
    2.提高了维护性和扩展性
    例子:需求: 饲养员给不同的动物喂不同的食物
    //开闭原则: 对扩展开放,对修改关闭
class Feeder{
   
	// 给老虎喂肉
//	public void feedMeatToTiger(Meat m, Tiger t) {
   
//		m.show();
//		t.show();
//	}
	
	// 熊猫喂竹子
<
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值