java多态

来源:百度知道 编辑:UC知道 时间:2024/05/28 12:25:40
class Animal{
int weight,height;
void eat(){
System.out.println("animal eat");
}
void sleep(){
System.out.println("animal sleep");
}
void breathe(){
System.out.println("animal breathe");
}
}

class Fish extends Animal{
void breathe(){
System.out.println("fish breathe");
}
}

class Test {

static void fn(Animal an){
an.breathe();
}

public static void main(String [] args){
Fish fh=new Fish();
Animal an;
an=fh;
Test.fn(an);

}
}

那段主方法一点也搞不懂,声明了一个Animal的对象后为什么能用Fish的实例对象去赋值 ???

Test.fn 传参传的是一个对象,是怎么回事?

看的是孙鑫的视频教程吧。

这个当然是可以的罗。我回答你的两个问题:

1.多态。

关于java的多态,有的书上是这样讲的,它讲java的多态分成静态的多态,和动态的多态,而所谓静态的多态就是只函数的重载,动态的多态就是方法的覆写。
如下面:
class Test
{
void print()
{
System.out.println("hello world");
}
void print(int x)
{
System.out.println("hello world"+i);
}
public static void main(String []args)
{
Test ts=new Test();
ts.print();
ts.print(10);
}
}
/*
上面的程序就是在一个类中成员方法的重载例子。也就是一个静态的多态性。系统会在你编译的时候根据你调用的方法的参数列表来动态的决定调用那一个函数。
*/

动态的多态:

class Test
{
void print()
{
System.out.println("hello Test");
}
public static void main(String []args)
{
A a=new A();
a.print();
}
}

class A extends Test
{
void print()
{
System.out.println("hello A");
}
}
<