/*
1多态的体现
父类的引用也可以接受自己的子类
2多态的前提
必须是类与类之间有联系,要么是继承要么是实现。
通常要覆盖
3多态的好处
很好的提高代码的扩展性
4多态的应用
5多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类中的成员。
6.多态的
*/
abstract class Animal
{
int num=9;
abstract void eat();
}
class Cat extends Animal
{
int num=112;
public void eat()
{
System.out.println("eat fish");
}
public void catchfish()
{
System.out.println("catch fish");
}
}
class Dog extends Animal
{
public void eat()
{
System.out.println("eat Bone");
}
public void lookHome()
{
System.out.println("look home");
}
}
class Pig extends Animal
{
public void eat()
{
System.out.println("eat food");
}
public void sleep()
{
System.out.println("can sleep");
}
}
class Duotaidemo
{
public static void main(String[] args)
{
//Cat c=new Cat();
//c.eat();
function(new Dog());
function(new Cat());
Animal a=new Cat();
a.eat();
/*
在多态中非静态成员函数的特点:
在编译时期:参阅引用型变量(a)所属的类中是否有调用的方法,如果有,则编译通过,否则失败
在运行时期:参阅对象所属的类中调用的方法(new Cat())
简单总结:编译看左边,运行看右边。
注意:1.。在多态中成员变量的特点:
无论编译和运行,都参考左边(引用类型所属的类)
2.。在多态中static成员函数的特点:
无论编译和运行。都参考左边(引用类型所属的类)
*/
}
public static void function(Animal a)
{
a.eat();
if(a instanceof Cat)
{
Cat c=(Cat)a;
c.catchfish();
}
else if(a instanceof Dog)
{
Dog d=(Dog)a;
d.lookHome();
}
else
{
Pig p=(Pig)a;
p.sleep();
}
}
}
Java 基础
最新推荐文章于 2025-05-07 13:38:15 发布