} class Fish extends Animal { //子类 要害字 extends 使 Fish 继续了 Animal 的 变量和方法 int height;//子类的变量 ,在调用时会隐藏父类的变量。 Fish()//子类的构造方法 { super(30,40);//利用 super 调用带参数的父类构造方法。 //不能Animal(30,40)这样直接调用父类构造方法。只能用super()调用。 //父类的构造方法不能被子类继续。
//super();//在调用子类构造方法的时候,隐含的调用了 super() 变量, //也就是先调用父类的构造方法(不带参数)在调用子类的构造方法。假如父类没有构造方法,编译器就会报错。 System.out.println("fish construct"); } void breathe()//子类的方法 { super.breathe();//通过 super 非凡变量 可以调用被子类覆盖的父类方法。 super.height=40;//通过 super 非凡变量 可以调用被子类隐藏的父类变量。 System.out.println("fish bubble"); } } class Integration { static void fn(Animal an) { an.breathe(); } public static void main(String[] args){ Animal an = new Animal(); //实例化Animal类的对象,an是对象的reference(引用) Fish fh = new Fish();//实例化Fish类的对象,fh是对象的reference(引用) an.breathe();//an 调用Animal类的void breathe()方法。 fh.height=30;//fh给Animal类的变量int height 赋值.继续父类的成员变量. fh.breathe();//fh调用它自己的方法,假如它自己没有这个方法但父类(Animal)中有这个方法,它就会调用父类中的这个方法。 //反之(假如有),它就会调用它自己的方法,这就是方法的覆盖。
//多态性 Animal an;//将an声明为Animal的对象变量。 Fish fh2 = new Fish(); fh2.eat(); an=fh; an=fh2;//因为子类没有eat()这个方法,所以这调用的是父类的eat()方法。 Integration.fn(an);//直接用类名调用静态方法(static)。多态性 } }