我试图在我的DogOwner类中创建一个名为makeDogsBark()的方法,它应该执行当前DogOwner所有狗的bark()方法。
当我尝试调用该方法时,我收到了以下错误。 DogOwner.java:21:错误:狗是抽象的;无法实例化
这是我的界面Dog.java:
public interface Dog {
String getName();
String getBreed();
void bark();
}
这是我的第一堂课Doggo.java:
public class Doggo implements Dog {
private String name;
public Doggo(String name){
this.name = name;
}
@Override
public String getName() {
return this.name;
}
@Override
public String getBreed() {
return "doggo";
}
@Override
public void bark() {
System.out.println("The doggo " + name + " made a noise: Woof!, it said.");
}
}
这是我的第二课Pupper.java:
public class Pupper implements Dog {
private String name;
public Pupper(String name){
this.name = name;
}
@Override
public String getName() {
return this.name;
}
@Override
public String getBreed() {
return "pupper";
}
@Override
public void bark() {
System.out.println("The pupper " + name + " made a noise: Bark! Bark! Bark!, it said.");
}
}
这是我的第三类DogOwner.java:
public class DogOwner {
private String name;
private ArrayList<Dog> dogsOwned;
public DogOwner(String name){
this.name = name;
}
public void adoptDog(Dog newDog){
if(!this.dogsOwned.contains(dogsOwned)){
this.dogsOwned.add(newDog);
}
}
public void makeDogsBark(){
System.out.println("The person " + name + " made all his/hers dogs bark.");
Dog dog = new Dog();
dog.bark();
}
}
答案 0 :(得分:1)
无法实例化接口:
Dog dog = new Dog(); // <-- This cannot possibly compile
您必须在:
之间进行选择Dog dog = new Doggo("good boy");
和
Dog dog = new Pupper("good boy");
然后让每只狗都吠叫的方法应该在列表中循环:
public void makeDogsBark() {
this.dogsOwned.forEach(Dog::bark);
}
或Java 7-版本:
public void makeDogsBark() {
for (Dog dog : this.dogsOwned) {
dog.bark();
}
}
(可选)属性dogsOwned也应该是List
:
private List<Dog> dogsOwned;
并在构造函数中实例化:
public DogOwner(String name) {
this.name = name;
this.dogsOwned = new ArrayList<>(); // new ArrayList<Dog>() Java 7-
}
( optional )此外,如果您希望Dog集合是唯一的,请使用Set而不是列表。
private Set<Dog> dogsOwned;
public DogOwner(String name) {
this.name = name;
this.dogsOwned = new HashSet<>(); // new HashSet<Dog>() Java 7-
}
这样你就可以:
public void adoptDog(Dog newDog) {
this.dogsOwned.add(newDog); // Won't add anything that already exists in the Set
}
问题是,这将比较并不总是理想的对象引用。
为了避免这种比较,您可以覆盖equals()
和hashcode()
方法,以您想要的方式比较对象。检查&#34;实现equals和hashcode&#34;在你最喜欢的搜索引擎上。
答案 1 :(得分:0)
public void makeDogsBark(){
dogsOwned.forEach(it -> it.bark());
}
答案 2 :(得分:0)
您无法实例化界面。
--85d945c02ac04c9fbdcd9979e34e6d04
Content-Disposition: form-data; name="param2"
paramVal2
--85d945c02ac04c9fbdcd9979e34e6d04
Content-Disposition: form-data; name="param1"
paramVal1
--85d945c02ac04c9fbdcd9979e34e6d04
Content-Disposition: form-data; name="file"; filename="file1.xml"
Content-Type: text/xml
--85d945c02ac04c9fbdcd9979e34e6d04
Content-Disposition: form-data; name="file"; filename="file2.xml"
Content-Type: text/xml
--85d945c02ac04c9fbdcd9979e34e6d04--
这是一段错误的代码。
而不是这样,你可以遍历 dogsOwned 列表,让每只狗都吠叫。
Dog dog = new Dog();
您也可以使用此功能跳过Java 8中的循环。
for(Dog dog : dogsOwned){
dog.bark();
}
希望这可以帮助你。