多态:可以理解为事物存在的多种体现形态,比如说人:男人、女人;动物:猫,狗。
多态:
多种形态。
这里要重点讲的就是对象的多态性。
狗 x = new 狗();
动物 y = new 狗();//对象的多态性,狗对象即是狗类型,又是动物形态。
必须要明确一点:狗是动物中的一种。
意味着狗是需要继承动物的才可以这样指向。
多态性:在程序中的体现。
好处:提高了代码的扩展性。
弊端:前期建立父类的引用虽然可以接收后期所有该类的子类对象。
前提:
*/
abstract class Animal
{
abstract void eat();
}
class Dog extends Animal
{
public void eat()
{
System.out.println("啃骨头");
}
public void lookHome()
{
System.out.println("看家");
}
}
class Cat extends Animal
{
public void eat()
{
System.out.println("吃鱼");
}
public void catchMouse()
{
System.out.println("抓老鼠");
}
}
class Pig extends Animal
{
public void eat()
{
System.out.println("饲料");
}
public void gongDi()
{
System.out.println("拱地");
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
public static void function(Ainimal a){
a.eat();
if (a instanceof Cat){ {
Cat c=(Cat)a;
c.catchMouse();
}
else if (a instanceof Dog)
{
Dog d=(Dog)a;
d.lookHome();
}
}//the above method showed one point should be careful in using the 多态
}
在编译时期:参阅引用类型变量所属的类中是否有调用的方法,如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法:------编译看引用,运行得看对象
总的来说在多态中,成员函数在多态调用时,编译看左边,运行看右边。
成员变量的特点,无论编译和运行,都参考左边(引用型变量所属的类)。
1,成员变量
2,成员函数。
3,静态函数。
*/
class Fu
{
int num = 4;
public void show()// 因为覆盖的特性,
{
System.out.println("fu show run");
}
public static void staticMethod()
{
System.out.println("fu static method run");
}
}
class Zi extends Fu
{
int num = 5;
public void show()// 因为覆盖的特性,
{
System.out.println("zi show run");
}
public static void staticMethod()
{
System.out.println("zi static method run");
}
}
class DuoTaiTest
{
public static void main(String[] args)
{
Fu f = new Zi();
// System.out.println(f.num);//4
// f.show();//zi show run 因为函数覆盖的特性,运行的子类对象在调用show方法,
//覆盖了父类中的方法,运行的是子类自己的show方法。
f.staticMethod();
Zi z = new Zi();
z.staticMethod();
Fu.staticMethod();
Zi.staticMethod();
}
}