------<ahref="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
黑马程序员—— 6,多态
/*
关于多态的介绍
多态:事物的多种体现形式
动物:猫,狗
Cat a=new Cat();
Dongwu a=new Dongwu();
*/
abstract class Person
{
public abstract void eat();
}
class Student extends Person
{
publicvoid eat()
{
System.out.println("学生吃东西");
}
publicvoid study()
{
System.out.println("学生学习");
}
}
class Teacher extends Person
{
publicvoid eat()
{
System.out.println("老师吃东西");
}
publicvoid sleep()
{
System.out.println("老师睡觉");
}
}
class Duotai
{
public static void main(String[] args)
{
Persona= new Student();//父类的引用指向子类对象,向上转型
a.eat();
//a.study();这句话编译不通过,因为父类引用不能直接调用父类没有的方法
method(new Student());//父类引用也可以接收子类对象
//这种方式提高了程序的扩展性
method(newTeacher());
System.out.println("__________");
Personb=new Student();
method(b);
}
public static void method(Person b)//之所以要静态化,是因为静态只可以调用静态
{
b.eat();
if(b instanceof Student)//判断b是否是Student类
{
Student c=(Student)b;//向下转型,这样的话就可以调用子类的方法
c.study();
}
}
}
/*
多态的细节介绍
*/
class Animal
{
voidshout()
{
System.out.println("动物在叫");
}
voideat()
{
System.out.println("动物吃东西");
}
static void huxi()
{
System.out.println("动物在呼吸");
}
}
class Cat extends Animal
{
void eat()
{
System.out.println("猫在吃鱼");
}
void sleep()
{
System.out.println("猫在睡觉");
}
static void huxi()
{
System.out.println("猫在呼吸");
}
}
class Duotai2
{
public static void main(String[] args)
{
Animal a=new Cat();
a.eat();
a.shout();
//a.sleep();这句话编译不通过,因为在父类中没有sleep方法
/*
多态中非静态成员函数特点:
编译时候,看引用型变量所属的类中有调用的方法就通过
运行时候,看对象有调用方法就执行
*/
a.huxi();//这句话编译运行的结果是“动物在呼吸”
/*
这说明多态中,静态方法的编译和运行看引用型变量所属的类中有调用的方法就通过
*/
System.out.println("HelloWorld!");
}
}
/*
多态的应用例子
以电脑配件为例
*/
class zhuban//主板
{
public void run()
{
System.out.println("主板启动");
}
public void stop()
{
System.out.println("主板关闭");
}
public void peijian(PCI P)
{
if(P!=null)//要确保接口型变量不为空,否则会出现空指针异常
{
P.run();
P.stop();
}
}
}
interface PCI//PCI插槽
{
public abstract void run();
public abstract void stop();
}
class xianka implements PCI
{
public void run()
{
System.out.println("显卡开启");
}
publicvoid stop()
{
System.out.println("显卡关闭");
}
}
class Duotai3
{
public static void main(String[] args)
{
zhubana=new zhuban();
a.run();
a.peijian(newxianka());
a.stop();
System.out.println("HelloWorld!");
}
}
//编译运行结果如图1所示
图1