public interface Jumpable { public abstract void jump(); } public abstract class Animal { public abstract void eat(); } public class Cat extends Animal implements Jumpable{ public void eat() { System.out.println("猫吃鱼"); } public void jump() { System.out.println("猫可以跳高了"); } } public class AnimalDemo { public static void main(String[] args) { Animal a1 = new Cat();//代码1 a1.eat();//代码1 Jumpping j1=a1;//代码2 a1.jump();//代码2 } } (1)Animal 类能实例化吗?如果不能,说明原因。 (2)指出Cat类和Jumpable接口及Animal 类之间的关系,并用UML图表示这种关系。 (3)测试类中的代码1,体现了哪种语法现象? (4)测试类中的代码2,体现了什么语法现象?
时间: 2024-01-30 20:03:57 浏览: 69
详谈PHP中public,private,protected,abstract等关键字的用法
(1) Animal类不能实例化,因为它是一个抽象类,其中包含了抽象方法。
(2) Cat类继承自Animal类,同时实现了Jumpable接口。Animal类是Cat类的父类,而Jumpable接口则是Cat类所实现的一个接口。
以下是对应的UML图:
```
+----------------+
| Animal |
+----------------+
| |
| + eat() |
+--------+-------+
/_\
|
|
+----------------+
| Cat |
+----------------+
| |
| + eat() |
| + jump() |
+----------------+
/_\
|
|
+----------------+
| Jumpable |
+----------------+
| |
| + jump() |
+----------------+
```
(3) 代码1体现了向上转型,将子类对象赋值给父类类型的变量。
(4) 代码2体现了多态,通过接口类型的引用变量调用实现类的方法。但是代码2中的a1.jump()是错误的,因为Animal类中没有jump()方法,需要将a1强制转换为Jumpable类型的引用变量才能调用jump()方法。正确代码应该是:
```
Jumpping j1 = (Jumpable)a1;
j1.jump();
```
阅读全文