多态
1.定义:事物存在的多重体现形态
人:男人 动物:狗
女人 猫
猪
其实函数重载和函数覆盖都属于多态,但是重点讲对象的多态性
2.多态的体现
父类的引用指向自己的子类对象,换句话说,父类的引用可以接收自己的子类对象
3.多态的前提
(1)必须是类和类之间有关系,要么继承、要么实现
(2)存在覆盖(子类重写父类方法)
4.多态的好处
大大提高了程序的扩展性
5.多态的局限
多态只能使用父类的引用,访问父类中的成员,当存在子类覆盖父类非静态方法时,且父类的引用指向子类对象,则访问子父类的非静态同名方法时,调用的是子类方法
6.多态示例
/*
多态实例
需求:
基础班:学习、睡觉
高级班:学习、睡觉
将两类事物进行向上抽取
将事物不断向上抽取,总能找到所述的共同类型
*/
//抽象类
abstract class Student
{
public abstract void study();
public void sleep()
{
System.out.println("躺着睡");
}
}
//工具类,与上面的抽象类组成了基本体系
class DoStudent
{
public void DoSomething(Student stu)
{
stu.study();
stu.sleep();
}
}
//基础班学生
class BaseStudent extends Student
{
public void study()
{
System.out.println("Base study");
}
}
//高级班学生
class AdvStudent extends Student
{
public void study()
{
System.out.println("Adv study");
}
//重写父类方法
public void sleep()
{
System.out.println("坐着睡");
}
}
public class DuotaiDemo
{
public static void main(String[] args)
{
DoStudent stu = new DoStudent();
stu.DoSomething(new BaseStudent());
stu.DoSomething(new AdvStudent());
}
}
7.多态成员中的特点
多态成员的特点
注意:多态是父类引用指向子类对象,最终在内存中执行的是对象
(1)多态中,非静态成员函数的特点
所谓在多态中,是指父类引用指向子类对象的时候
编译期间:参阅引用型变量所属的类中是否有调用的方法,如果有,则编译通过,如果没有,则编译失败
在运行期间:参阅对象调用的类中是否有调用的方法,注意运行的前提是编译通过
(2)多态中静态成员函数的特点
无论编译还是运行,都参考左边(引用性变量所属的类,静态绑定)
(3)多态中成员变量的特点
无论是编译还是运行,都参考左边(引用型变量所属的类,静态绑定)
8.多态主板实例
接口的出现,提高了功能扩展性
多态的应用,提高了程序的扩展性
class MainBoard
{
public void runMainBoard()
{
System.out.println("mainboard run");
}
public void usePCI(PCI p)
{
p.open();
p.close();
}
}
//PCI接口卡槽
interface PCI
{
public abstract void open();
public abstract void close();
}
//网卡继承pci接口
class NetCard implements PCI
{
public void open()
{
System.out.println("NetCard run");
}
public void close()
{
System.out.println("NetCard close");
}
}
//声卡继承pci接口
class SoundCard implements PCI
{
public void open()
{
System.out.println("SoundCard run");
}
public void close()
{
System.out.println("SoundCard close");
}
}
public class DuotaiDemo
{
public static void main(String[] args)
{
MainBoard mb = new MainBoard();
mb.runMainBoard();
mb.usePCI(new NetCard());
mb.usePCI(new SoundCard());
}
}