Class A{ Void cry(){ } } Class D extends A{ Void cry(){ System.out.println(“这是狗的叫声:汪汪汪”); } } class C extends A { void cry()( System.out.println("这是猫的叫声:喵喵喵”); } } public class Test{ public static void main(String args[]){ A a=new D(); a.cry(); a=new C(); a.cry(); } }
时间: 2024-03-15 12:42:03 浏览: 52
这段代码使用了继承的概念,类D和类C都继承了类A的cry()方法,并在自己的类里重写了该方法。在Test类里,首先创建了一个类D的对象a,然后调用a的cry()方法,输出了“这是狗的叫声:汪汪汪”。接着又创建了一个类C的对象a,调用a的cry()方法,输出了“这是猫的叫声:喵喵喵”。因为类D和类C都继承了类A的cry()方法,所以可以用类A的引用来引用类D和类C的对象,并调用它们各自的cry()方法。
相关问题
修改这段代码里的错误 不能修改animal类 接口 main函数 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input=new Scanner(System.in); IAbility animal=null; int type=input.nextInt(); String name=input.next(); int age=input.nextInt(); if (type==1) animal=new Dog(name,age); else animal=new Cat(name,age); Simulator sim=new Simulator(); sim.playSound(animal); input.close(); } } abstract class Animal{ private String name; //名字 private int age; //年龄 public Animal(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } interface IAbility{ void showInfo(); //输出动物信息 void cry(); //动物发出叫声 } class Dog extends Animal implements IAbility { Dog(String name, int age) { super(name,age); } public void showInfo() { System.out.println("我是一只狗,我的名字是" + super.getName() + ",今年 " + super.getAge() +"岁"); } public void cry() { System.out.println("旺旺"); } } class Cat extends Animal implements IAbility { Cat(String name, int age) { super(name,age); } public void showInfo() { System.out.println("我是一只猫,我的名字是" + super.getName() + ",今年 " + super.getAge() +"岁"); } public void cry() { System.out.println("喵喵"); } } class Simulator { public void playSound(IAbility animal) { animal.showInfo(); animal.cry(); System.out.println(animal.getName()); } }
好的,这段代码存在两个错误:
1. 在 `Simulator` 类的 `playSound` 方法中,最后一个 `println` 语句中的 `name` 应该改为 `getName()` 方法调用。
2. 在 `Dog` 和 `Cat` 类中,构造方法的访问权限应该改为 `public`。
以下是修改后的代码:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
IAbility animal = null;
int type = input.nextInt();
String name = input.next();
int age = input.nextInt();
if (type == 1) {
animal = new Dog(name, age);
} else {
animal = new Cat(name, age);
}
Simulator sim = new Simulator();
sim.playSound(animal);
input.close();
}
}
abstract class Animal {
private String name; // 名字
private int age; // 年龄
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
interface IAbility {
void showInfo(); // 输出动物信息
void cry(); // 动物发出叫声
}
class Dog extends Animal implements IAbility {
public Dog(String name, int age) {
super(name, age);
}
public void showInfo() {
System.out.println("我是一只狗,我的名字是" + super.getName() + ",今年 " + super.getAge() + "岁");
}
public void cry() {
System.out.println("旺旺");
}
}
class Cat extends Animal implements IAbility {
public Cat(String name, int age) {
super(name, age);
}
public void showInfo() {
System.out.println("我是一只猫,我的名字是" + super.getName() + ",今年 " + super.getAge() + "岁");
}
public void cry() {
System.out.println("喵喵");
}
}
class Simulator {
public void playSound(IAbility animal) {
animal.showInfo();
animal.cry();
System.out.println(animal.getName());
}
}
```
补全代码 ``` class Animal{ void cry(){} } //重写cry实现多态 class Dog ________ Animal{ void cry(){ System.out.println("Wang!Wang!......"); } } //重写cry实现多态 class Cat ________ Animal{ void cry(){ System.out.println("miao~~miao~~..."); } } _______ class Example5_9{ public static void main(String args[]){ Animal _______; //================== animal=____ Dog(); //animal是Dog对象的上转型对象 animal.cry(); //上转型对象可以代替子类对象去调用子类重写的实例方法, //================== animal=_____ Cat(); //animal是Cat对象的上转型对象 animal.cry(); } ``` ```java interface Computable{ final int MAX=100; int f(int x); //不用实现 public ________ int g(int x,int y); //虚拟方法,不用实现 } class A _________ Computable{ public int f(int x){ return x*x; } public int g(int x,int y){ return x+y; } } class B ___________ Computable{ //递两个参数 public int f(int x){ return x*x*x; } //递两个参数 public int g(int x,int y){ return x*y; } } public class Example5_11{ public ________ void main(String args[]){ Computable a,b; a=_____ A(); b=_____ B(); System.out.println(a.MAX); System.out.println(""+a.f(10)+" "+a.g(12,6)); //硬传递两个参数 System.out.println(b.MAX); System.out.println(""+b.f(10)+" "+b.g(29,2)); //硬传递两个参数 } }
补全代码:
```java
class Animal{
void cry(){}
}
//重写cry实现多态
class Dog extends Animal{
void cry(){
System.out.println("Wang!Wang!......");
}
}
//重写cry实现多态
class Cat extends Animal{
void cry(){
System.out.println("miao~~miao~~...");
}
}
public class Example5_9{
public static void main(String args[]){
Animal animal;
//==================
animal = new Dog(); //animal是Dog对象的上转型对象
animal.cry(); //上转型对象可以代替子类对象去调用子类重写的实例方法,
//==================
animal = new Cat(); //animal是Cat对象的上转型对象
animal.cry();
}
}
interface Computable{
final int MAX=100;
int f(int x); //不用实现
public abstract int g(int x,int y); //虚拟方法,不用实现
}
class A implements Computable{
public int f(int x){
return x*x;
}
public int g(int x,int y){
return x+y;
}
}
class B implements Computable{
//递两个参数
public int f(int x){
return x*x*x;
}
//递两个参数
public int g(int x,int y){
return x*y;
}
}
public class Example5_11{
public static void main(String args[]){
Computable a,b;
a=new A();
b=new B();
System.out.println(a.MAX);
System.out.println(""+a.f(10)+" "+a.g(12,6)); //硬传递两个参数
System.out.println(b.MAX);
System.out.println(""+b.f(10)+" "+b.g(29,2)); //硬传递两个参数
}
}
```
阅读全文