多态:
1.多态的体现:父类的引用指向了自己的子类对象
父类的引用也可以接收自己的子类对象。
2.多态的前提:必须是类与类之间的关系,要么继承,要么实现。
通常还有一个前提:存在覆盖。
3.多态的好处:
多态的出现大大的提高了程序的扩展性。
4.多态的弊端:
提高了扩展性,但是只能使用父类的引用访问父类中的成员。
在多态中,成员函数(非静态)的特点:(Fu f= new Zi();
在编译时期:参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用方法。
简单点说:成员函数在被调用时:编译看左边,运行看右边
在多态中,成员变量的特点:(Fu f= new Zi();
无论编译和运行,都参考左边(引用型变量所属的类)。先找引用型变量中所属的的成员变量
在多态中,静态成员函数的特点:(Fu f= new Zi();
无论编译和运行,都参考左边(引用型变量所属的类)。运行时父类和子类都会加载进内存,静态函数先存在 ,是不需要对象的,
abstract class Student
{
public abstract void study();
public void sleep()
{
System.out.println("sleep");
}
}
interface Abc
{
public void sport();
}
class BesaStudent extends Student implements Abc
{
public void study()
{
System.out.println("good study");
}
public void sport()
{
System.out.println("play footbore");
}
}
class VaStudent extends Student
{
public void study()
{
System.out.println("good good study");
}
}
class Demo
{
public static void main(String[] args)
{
funtion(new BesaStudent());
}
public static void funtion(Student b)
{
b.study();
b.sleep();
if(b instanceof BesaStudent)//关键词:instanceof 是判断引用类型
{
BesaStudent a =(BesaStudent)b;//向下转型Student 转BesaStudent,这样BesaStudent就可以调用本类特有的属性了
a.sport();
}
}
}
|
|