Tôi đang trong một khóa học java giới thiệu và chúng tôi mới bắt đầu học về kế thừa. Tôi đang làm việc trên một nhiệm vụ yêu cầu chúng ta tạo một siêu lớp "Thú cưng" với tên và tuổi; và ba phân lớp, mỗi phân lớp có đặc điểm riêng của chúng (tôi đã chọn "Chó", "Mèo" và "Chim"). Sau khi chúng ta có tất cả những thứ này, chúng ta sẽ tạo ra một lớp Main để kiểm tra tất cả mọi thứ, và đây là nơi tôi đang gặp vấn đề. Tôi đang cố gắng gọi các phương thức get
cho những đặc điểm độc đáo này trong phạm vi Main
, nhưng dường như chỉ tìm các phương thức nằm trong siêu lớp.Gọi một phương thức phân lớp từ siêu lớp
Đây là lớp chính:
public class Kennel {
public static void main(String[] args) {
// Create the pet objects
Pet cat = new Cat("Feline", 12, "Orange");
Pet dog = new Dog("Spot", 14, "Dalmation");
Pet bird = new Bird("Feathers", 56, 12);
// Print out the status of the animals
System.out.println("I have a cat named " + cat.getName()
+ ". He is " + cat.getAge() + " years old."
+ " He is " + cat.getColor()
+ "When he speaks he says " + cat.speak());
System.out.println("I also have a dog named " + dog.getName()
+ ". He is " + dog.getAge() + " years old."
+ " He is a " + dog.getBreed()
+ " When he speaks he says " + dog.speak());
System.out.println("And Finally I have a bird named "
+ bird.getName() + ". He is " + bird.getAge() + " years old."
+ " He has a wingspan of " + bird.getWingspan() + " inches."
+ " When he speaks he says " + bird.speak());
}
}
Đây là lớp cha của tôi
abstract public class Pet {
private String name;
private int age;
// Constructor
public Pet(String petName, int petAge) {
this.name = petName;
this.age = petAge;
}
// Getters
public String getName() { return(this.name); }
public int getAge() { return(this.age); }
// Setters
public void setName(String nameSet) { this.name = nameSet; }
public void setAge(int ageSet) { this.age = ageSet; }
// Other Methods
abstract public String speak();
// toString
@Override
public String toString() {
String answer = "Name: " + this.name + " Age: " + this.age;
return answer;
}
}
Và đây là một trong những lớp con (tất cả họ đều giống nhau và đang gặp các lỗi tương tự)
public class Cat extends Pet {
private String color;
// Constructor
public Cat(String petName, int petAge, String petColor) {
super(petName, petAge);
this.color = petColor;
}
// Getters
public String getColor() { return(this.color); }
// Setters
public void setColor(String colorSet) { this.color = colorSet; }
// Other Methods
@Override
public String speak() { return "Meow!"; }
// toString
@Override
public String toString() {
String answer = "Name: " + super.getName() + " Age: "+super.getAge()
+ " Color: " + this.color;
return answer;
}
}
Vì vậy, những gì đang xảy ra là tôi không thể tìm ra phương pháp chính để tìm số cat.getColor()
meth od, hoặc bất kỳ cái nào khác duy nhất cho các lớp con.
lỗi là gì? Tôi tin rằng bạn phải bỏ nó vì bạn đã làm 'Pet cat = new Cat (...' thay vì 'Cat cat = new Cat (...'. – twain249
Điều này đã xóa nó, cảm ơn bạn! – salxander