多态

为什么需要有多态?
多态的概述

生活中:
一个动作在不同的环境下表现出来的不同状态
代码中
同一个方法在不同的类下体现出来的不同的实现
内存中
父类引用指向子类对象
多态在代码中如何来实现?
1.必须要存在继承关系
2.必须存在方法重写
3.父类引用指向子类对象

package com.sxt;


public class DouTai {
   
	public static void main(String[] args) {
   
		CutBoy b = new Barber();
		b.cut();
		b = new Doctor();
		b.cut();
		b = new Director();
		b.cut();
	}
}
class CutBoy {
   
	public void cut() {
   
	System.out.println("想怎么cut就怎么cut");
	}
}
class Barber extends CutBoy {
   
	public void cut() {
   
	System.out.println("剪头发");
	}
}
class Doctor extends CutBoy {
   
	public void cut() {
   
	System.out.println("动手术");
	}
}
class Director extends CutBoy {
   
	public void cut() {
   
	System.out.println("暂停");
	}
}

多态访问成员的特点:

成员变量:编译时期看左边类型,运行时期看左边类型
成员方法:编译时期看左边类型,运行时期看右边类型
构造方法:帮助子类初始化父类继承过来的成员
静态方法:编译时期看左边类型,运行时期看左边类型

package com.sxt.duotaidemo;

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

class Fu {
   

	int num = 5;

	public Fu() {
   
		super();
	}
	
	public void method() {
   
		System.out.println("Fu.method()");
	}

	public Fu(int num) {
   
		super();
		this.num = num;
	}
	
	public static void staticMethod() {
   
		System.out.println("Fu.staticMethod()");
	}
}

class Zi extends Fu {
   

	int num = 10;
	
	public Zi() {
   
		super();
	}
	
	@Override
	public void method() {
   
		System.out.println("Zi.method");
	}

	public static void staticMethod() {
   
		System.out.println("Zi.staticMethod()");
	}

	
}

多态的优点:
1.简化了代码
2.提高了维护性和扩展性

开闭原则:对扩展开放,对修改关闭

package com.sxt;

/*
 * 饲养员给不同的动物喂不同的食物
 */
public class DuoTaiDemo02 {
   
	public static void main(String[] args) {
   
		Feeder f = new Feeder();
//		f.feedMeatToTiger(new Tiger(), new Meat());
//		
//		f.feedBambooToPanda(new Panda(), new Bamboo());
		
		Animal an = new Tiger();
		Food food = new Meat();
		f.feed(an, food);
		
		f.feed(new Monkey(), new Banana());
	}
}

//开闭原则: 对扩展开放,对修改关闭
class Feeder{
   
	// 给老虎喂肉
	/*
	 * 返回值类型: void
	 * 参数列表: Tiger t, Meat m
	 * 方法名: feedMeatToTiger
	 */
	/*public void feedMeatToTiger(Tiger t, Meat m) {
		t.show();
		m.show();
	}
	
	public void feedBambooToPanda(Panda p, Bamboo b) {
		p.s
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值