Day10总结:
多态的特点:
成员变量:
当在子父类中出现了相同的非私有成员变量时,在多态调用中的特点:
在编译时:参考引用型变量所属类中是否有调用的成员变量,如果有编译通过,如果没有编译失败。
在运行时:参考引用型变量所属的类中的成员。
简单一句话:对于成员变量无论是编译还是运行都参考引用型变量所属类中的成员变量。
也就是说:成员变量看等号左边。
成员函数:
当子父类中出现一模一样的函数时,在多态调用中的特点:
在编译时:参考引用型变量的所属的类中是否有调用的成员函数。
在运行时:参考的是对象所属的类中是否有调用的成员函数。
原因是:编译时期应该参考父类,运行时期应该参考子类。因为成员函数上有一个特点覆盖。
简单一句话:对于成员函数,编译看左边,运行看右边。
静态函数:
在编译时期:参考引用型变量所属的类中是否调用的静态函数,如果有编译通过,如果没有编译失败。
在运行时期:参考的还是引用型变量所属的类中的静态函数。
简单一句话:对于静态函数,无论是编译还是运行都看左边
总结:对于多态成员而言,无论编译还是运行都看左边,只有成员非静态函数,编译看左边,运行看右边,因为覆盖的特性。
多态的应用:
代码实现:
Object:所有类的父类,该类中的方法所有对象都具备。
代码实现:
Class Demo extends Object
{
Private int num;
Demo(int num)
{
=num;
}
通常都会按照对象自身的特点对对象进行比较,比如:现在要比较两个Demo对象中null值是否相同。
}
Public pare(Demo b)
{
Return =;
}
发现Demo继承Oject已经具备了比较对象的方法,pare了,直接使用equals就可以了,可是Object equals比较的是地址值,不是我们所需的,那就保留的父类的功能声明,建立自身的比较内容,这就是覆盖。
Public boolean equals(Object obj)
{
If(!(Object instanceof Deno))
Return false;
Demo d=(Demo)obj;向下转型。
Return =;此处体现了多态的特性。
}
Public String toString()
{
Return "demo:"+num;
}
Class ObjectDemo
{
Public static void main(String[] args)
{
Demo d1=new Demo(4);
Demo d2=new Demo(4);
Sop(());
Sop(d1);
Sop(());
Sop(pare(d2));
}
}
内部类:
将一个类定义在另外一个类的里面的类称为内部类
当一个类要直接访问另外一个类的成员时,可以将这个类定义到另一个类里面,称为另一个类的内部类。
内部类访问的规则:
内部类可以直接访问外部类中的成员。
外部类需要创建内部类对象才可以访问内部类中的成员。
在描述事物时,事物中还有具体的事物时,而且这个内部事物在访问着外部的事物时。
这时对这个内部事物的描述,就可以用内部类完成。
内部类出于外部类的成员位置上是可以被成员修饰符所修饰的。
Public
Private:将内部类私有化时,只能对外提供方法,对内部类的控制。
Static:当内部类中定义了静态的成员时,该内部类必须静态的,否则编译失败。
代码体现:
Class Outer
{
Static int num=4;
Static class Inner
//内部类,为什么要定义内部类?
当一个类要直接访问另一个类中的成员时。可以将这个类定义到另一类里面。
{
Static void show()
{
Sop("show run"+num);
}
Public void method()
{
Inner in=new Inner();
In.,show();
}
}
}
Class InnerClassDemo
{
Public static void main(String[] args)
{
//Outer out=new Outer();
//();
//("Hello World!");
//当访问一个外部类的内部类时,先由外部类对象再有内部类对象。
//
黑马程序员java培训就业班笔记:day10总结 来自淘豆网m.daumloan.com转载请标明出处.