您的位置:首页 > 职场人生

黑马程序员——面向对象、多态

2014-03-05 18:19 211 查看
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

一、多态的产生

Java程序中支持单继承,也就是说一个子类只有一个直接父类,父类中的方法子类可以选择重写,也可以不重写。但是子类已经完全继承了父类的变量和方法。所以,根据引用类型的不同,子类对象可以分别实现父类、子类中方法。父类中没有被覆写的方法,两种引用类型都能使用。

引用类型实例:Cat c=new Cat();

Animal a= new Cat();

二、多态的使用注意

class  PolymorficTest
{
public static void main(String[] args)
{
Fu f=new Zi();
System.out.println(f.a);
//System.out.println(f.b);类型为FU的变量f 中找不到变量b ,编译失败
f.A();
//f.B();父类中不存在该方法,编译时报

Zi z=(Zi)f;
System.out.println(z.a);
System.out.println(z.b);
z.A();
z.B();
}

}

class Fu
{
int a=1;
void A()
{
System.out.println("hello 我是A-Fu");
}

}

class Zi extends Fu
{
//int a=2;
int b=1;
/*
void A()
{
System.out.println("hello 我是A-Zi");
}
*/
void B()
{
System.out.println("hello 我是B-Zi");
}
}


多态的使用主要问题存在于,当对象的引用类型为父类时,编译全部针对父类,当对象调用了父类中不存在的方法时编译就会失败。调用变量和方法时,只会调用父类中的变量,而调用方法时分两种情况,①方法被覆写,调用子类中覆写后的方法,②未被覆写,调用父类中方法。另外,考虑静态的情况,分为静态变量和静态方法。静态变量,与非静态变量相同,只调用父类中的值;静态方法,与非静态方法不同,调用父类中静态方法,无视重写。

关于静态,由于静态与对象存储方式不同,静态存储于方法区,对象存储于堆内存。二者之间无必然联系,静态只依赖于类的加载而存在,类使用解释也就释放静态。所以在多态中,静态的调用只与对象的引用类型相关。

class  PolymorficTest
{
public static void main(String[] args)
{
Fu f=new Zi();
System.out.println(f.a);
//System.out.println(f.b);类型为FU的变量f 中找不到变量b ,编译失败
f.A();
f.C();
//f.B();父类中不存在该方法,编译时报

Zi z=(Zi)f;
System.out.println(z.a);
System.out.println(z.b);
z.A();
z.B();
z.C();
}

}

class Fu
{
static int a=1;
void A()
{
System.out.println("hello 我是A-Fu");
}
static void C()
{
System.out.println("hello 我是C-Fu");
}

}

class Zi extends Fu
{
static int a=2;
int b=1;
/*
void A()
{
System.out.println("hello 我是A-Zi");
}
*/
void B()
{
System.out.println("hello 我是B-Zi");
}
static void C()
{
System.out.println("hello 我是C-Zi");
}
}


三、多态的应用分析

在实际操作中,我们不断的向上抽取出了父类。父类,就是我们工程中的共性内容,创建父类引用类型的子类对象,可以对实例对象的共性内容进行修改、操作,实现高效。

简言之:分析顶层父类,了解功能;创建底层子类对象,实现功能。

----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: