多态
1、概念
某一类事物具备的多种形态
2、扩展性
多态的体现
父类的引用指向了自己的子类的对象
父类的引用也可以接受自己的子类对象
public static void function(Animal a){a.eat()}(Cat a=new Cat())
多态的前提
必须是类与类之间有关系,要么继承,要么实现
通常还有一个前提:存在覆盖
多态的好处
提高了程序的扩展性
多态的弊端:
只能使用父类的引用访问父类中的成员
多态的应用
多态的出现代码中的特点(多态使用的注意事项)
3、转型
类型提升,向上转型 Animal a=new Cat();
强制转换 Cat cat=(Cat)animal;
instanceof
if(animal instanceof Cat)...
/*批量操作属于同一个体系的对象*/
public class Picaozuo
{
public static void main(String[] args)
{
DoSomething ds=new DoSomething();
ds.doSomething(new BaseStudent());
ds.doSomething(new AdvStudent());
}
}
abstract class Student
{
abstract void study();
public void sleep()
{
System.out.println("躺着睡");
}
}
class DoSomething
{
public void doSomething(Student s)
{
s.study();
s.sleep();
}
}
class BaseStudent extends Student
{
void study()
{
System.out.println("基础班学习");
}
public void sleep()
{
System.out.println("坐着睡");
}
}
class AdvStudent extends Student
{
void study()
{
System.out.println("就业办班学习");
}
}
4、在多态中成员函数的特点
在编译时期,参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期,参阅对象所使用的类中是否有调用的方法
总结:成员函数在多态调用时,编译看左边,运行看右边
5、在多态中成员变量的特点
无论编译和运行,都参考左边(引用型变量所属的类)
6、在多态中静态成员函数、变量的特点
无论编译和运行,都参考左边
7、主板 接口实例
public class PciDemo
{
public static void main(String[] args)
{
MainBoard m=new MainBoard();
m.run();
m.usePCI(null);
m.usePCI(new NetBoard());
m.usePCI(new SoundBoard());
}
}
interface PCI//通过接口实现了程序的扩展性,即以后再有什么”卡“的话,只需要让这个”卡“在实现 PCI接口即可
{
public void open();
public void close();
}
class MainBoard
{
public void run()
{
System.out.println("MainBoard run");
}
public void usePCI(PCI pci)
{
if(pci!=null)
{
pci.open();
pci.close();
}
}
}
class NetBoard implements PCI
{
public void open()
{
System.out.println("NetBoard run");
}
public void close()
{
System.out.println("NetBoard close");
}
}
class SoundBoard implements PCI
{
public void open()
{
System.out.println("SoundBoard run");
}
public void close()
{
System.out.println("SoundBoard close");
}
}
8、Object--equals()
9、Object--toString()