7.19_java学习_多态

本文详细阐述了Java中的多态概念,包括多态的体现、前提、好处和弊端,并通过代码实例展示了多态的应用场景。通过具体代码分析,解释了多态在成员函数和成员变量的特点,以及如何在不同情况下实现代码的复用性和扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:多态

/*
多态
1,多态的体现
 父类的引用指向了自己的子类对象
 父类的引用也可以接受子类的对象

2,多态的前提
  必须是类与类之间有关系,要么继承,要么实现。

3,多态的好处
  大大的提高了代码的复用性

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

5,在多态中成员函数的特点:
1).在编译时期:参阅引用型变量所属类中是否有调用的方法。如果有,编译通过
在运行时期: 参阅对象所属类是否有调用的方法,如果有编译成功
简单来说:成员函数在多态调用时,编译看左边,运行看右边。
---------下面东西不常用,但面试容易考到---------------------
2)在多态中成员变量的特点:
在编译和运行时只看左边(引用变量所属类)

3)在多态中静态函数的特点:
无论编译和运行,都参考左边,
*/
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  DouTai
{
	public static void main(String[] args) 
	{
		Animal c = new Cat();//类型提升,向上转型。
		c.eat();

		Cat ca = (Cat)ca;//如果想要调用猫的特有方法时,如何操作?
		//强制将父类的引用。转成子类类型。不能讲父类对象转成子类类型。
		//多态自始至终都是子类对象在做着变化。
		ca.eat();
		ca.catchMouse();


		

		Dog d = new Dog();
		d.eat();

		function(new Cat());//跟上面效果一样,但是提高了代码复用性、
		function(new Dog());
	}
	public static void function(Animal a)
	{
		a.eat();
		if(a instanceof Cat)
		{
			Cat c = (Cat)a;
			c.catchMouse();
		}
	}
}


 

二:
/*
需求:
电脑运行实例
电脑运行基于主板
*/
interface PCI
{
	public void open();
}
class MainBoard
{
	public void run()
	{
		System.out.println("mainboard run");
	}
	public void usePCI(PCI a)//PCI p = new NetCard()
	{
		if(a != null)
		{
		a.open();
		}
	}
}
class NetCard implements PCI
{
	public void open()
	{
		System.out.println("open netcard");
	}
}
class SoundCard implements PCI
{
	public void open()
	{
		System.out.println("open soundcard");
	}
}
class Demo 
{
	public static void main(String[] args) 
	{
		MainBoard ma = new MainBoard();
		ma.run();
		ma.usePCI(null);
		ma.usePCI(new NetCard());
		ma.usePCI(new SoundCard());
	}
}

练习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值