java面向对象-多态(概要、扩展性、转型)

/*

多态

定义:某一类事物的多种存在形式。

1,动物中猫,狗。

2,猫这个对象对应的类型是猫类型

2.1猫 x = new 猫();

3,同时猫也是动物中的一种,也可以把猫称为动物。

3.1动物 y = new 猫();

3.2动物是猫和狗具体事物中抽取出来的父类型。

3.3父类型引用指向了子类对象

多态:可以理解为事物存在的多种体现形态

人:男人,女人

动物:猫,狗

猫 x = new 猫();

动物 x = new 猫();


1,多态的体现

父类的引用指向了自己的子类对象

父类的引用也可以接收自己的子类对象

2,多态的前提

必须是类与类之间的关系,要么继承,要么实现

通常还有一个前提:存在覆盖

3,多态的好处:

多态的出现大大的提高程序的扩展性

4,多态的弊端

提高了扩展性,但是只能使用父类的引用访问父类中的成员。


5,多态的应用

*/

	abstract class Animal {
		public abstract void eat();
	}

	class Cat extends Animal {
		public void eat() {
			System.out.println("吃鱼");
		}

		public void catchMouse() {
			System.out.println("抓老鼠");
		}
	}

	class Dog extends Animal {
		public void eat() {
			System.out.println("吃骨头");
		}

		public void kanJia() {
			System.out.println("看家");
		}
	}

	class Pig extends Animal {
		public void eat() {
			System.out.println("饲料");
		}

		public void gongDi() {
			System.out.println("拱地");
		}
	}

	class Niu extends Animal {
		public void eat() {
			System.out.println("青草");
		}

		public void genTian() {
			System.out.println("耕田");
		}
	}

	class DuoTaiDemo {
		public static void main(String[] args) {
			// Cat c = new Cat();
			// c.eat();
			// c.catchNouse();
			// Dog d = new Dog();
			// d.eat();
			//Cat c = new Cat();
			//c.eat();
			//Animal c = new Cat();
			//c.eat();
			/*
			 * function(new Cat()); function(new Dog()); function(new Pig());
			 */
			//Animal a = new Cat();//类型提升,向上转型
			//a.eat();
			//如果想要调用猫的特有方法时,如何操作?
			//强制将父类的引用,转成子类类型,向下转型
			Cat c = (Cat) a;
			c.catchMouse();
			//千万不要出现这样的操作,就是将父类对象转成子类类型。    //我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换。
			//多态自始至终都是子类对象在做着变化。
			Animal a = new Animal();
			Cat c = (Cat) a;
			function(new Cat());
			function(new Dog());
			function(new Pig());
			function(new Niu());
		}

		public static void function(Animal a) {
			a.eat();
			if (a instanceof Cat) {
				Cat c = (Cat) a;
				c.catchMouse();
			} else if (a instanceof Dog) {
				Dog d = (Dog) a;
				d.kanJia();
			} else if (a instanceof Pig) {
				Pig p = (Pig) a;
				p.gongDi();
			} else if (a instanceof Niu) {
				Niu n = (Niu) a;
				n.genTian();
			}
		}
	}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值