java基础——多态


一、表现:

父类或者接口的引用指向了或者接收了自己的子类对象。 

二、前提:

1,类与类之间要有关系。继承,实现。

2,通常都会有覆盖。

三、好处:

预先定义的程序可以运行后期程序的内容。

增强了程序的扩展性。

四、弊端:

虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能内容。

不能预先使用子类中定义的特有功能。

五、多态的注意事项:

在代码中。

对于成员函数:Fu f = new Zi(); f.method();

编译时期:看左边。

运行时期:看右边。

因为成员函数有一个覆盖操作。      

对于非私有的实例变量,

静态变量,静态方法。

编译和运行都看左边。

六、转型。

子类对象被父类引用:子类对象在向上转型。

将指向子类对象的父类应用转换成子类类型引用:向下转型。

七、应用。

(1)父类的引用指向了子类

abstract class Animal
{
	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 DuoTaiDemo
{
	public static void main(String[] args) 
	{
		//类型提升。 向上转型。
		Animal a = new Cat();
		a.eat();
		//强制将父类的引用。转成子类类型。向下转型。调用子类的特有方法
		Cat c = (Cat)a;
		c.catchMouse();

		//类型提升。 向上转型。
		Animal a1 = new Dog();
		a1.eat();
		//强制将父类的引用。转成子类类型。向下转型。调用子类的特有方法
		Dog d = (Dog)a1;
		d.kanJia();
	}
}

(2)接口的引用接收了自己的子类对象。

interface PCI
{
	public void open();
	public void close();
}

class MainBoard
{
	public void run()
	{
		System.out.println("mainboard run ");
	}
	public void usePCI(PCI p)//PCI p = new NetCard()//接口型引用指向自己的子类对象。
	{
		if(p!=null)
		{
			p.open();
			p.close();			
		}
	}
}

class NetCard implements PCI
{
	public void open()
	{
		System.out.println("netcard open");
	}
	public void close()
	{
		System.out.println("netcard close");
		method();
	}	
}

class SoundCard implements PCI
{
	public void open()
	{
		System.out.println("SoundCard open");
	}
	public void close()
	{
		System.out.println("SoundCard close");
	}
}

class DuoTaiDemo5 
{
	public static void main(String[] args) 
	{
		MainBoard mb = new MainBoard();
		mb.run();
		mb.usePCI(null);
		mb.usePCI(new NetCard());
		mb.usePCI(new SoundCard());		
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值