网站建设文化哪家好,主页网址,怎样将视频代码上传至网站,口碑好的宜昌网站建设本问题已经有最佳答案#xff0c;请猛点这里访问。我有两个类动物和狗。因为你可以从动物身上延伸出来。我可以毫无问题地编写这些类#xff0c;但我注意到我可以像这样创建一个新的dog对象#xff1a;Dog firstDog new Dog(rocky);没关系#xff0c;但是当我…本问题已经有最佳答案请猛点这里访问。我有两个类动物和狗。因为你可以从动物身上延伸出来。我可以毫无问题地编写这些类但我注意到我可以像这样创建一个新的dog对象Dog firstDog new Dog(rocky);没关系但是当我尝试创建这样的新实例时Animal secondDog new Dog(alex);没有任何错误但我无法访问我在Dog类中编写的任何字段或方法即使它们是公共的所以如果我想在一个类型与其超类的类型相同的变量中保存一个对象我可以到达字段和仅实现超类的方法(对于此示例名称颜色setColor()和toString())并且没有任何方法可以访问在子类中实现的字段和方法。我是否正确理解当我尝试调用secondDog的toString()函数时它调用我在Dog类中编写的方法我知道我在Dog类中重写了这个函数但是我无法达到我在Dog类中实现的其他方法。 java如何处理这些动物类public class Animal {private String name;private String color;public Animal(String name){this.namename;}public void setColor(String color){this.colorcolor;}public String toString(){returnHi, my name is this.name . Im this.color;}}狗类public class Dog extends Animal {private int age;public Dog(String name){super(name);setColor(gray);this.age 7;}public String speakDog(){returnwof!;}public String toString(){return super.toString() and I speakDog();}}Can java可能重复调用其他对象中的父重写方法但不是子类型stackoverflow.com/questions/10985223/java-polymorphism当你写这个Animal secondDog new Dog(alex);你告诉Java secondDog是Animal就是这样。您被允许将Dog分配给Animal引用的原因是因为Dog是Animal的子类因此允许它。但是显式为Animal的secondDog只能访问Animal类的属性和行为。要访问Dog的属性和行为您需要强制转换它((Dog)secondDog).speakDog();将它转换为Dog就像告诉Java嘿相信我。这个对象是狗。现在只有更具体您才可以访问狗的属性。 (如果没有它仍然被视为动物(更高级))。但是如果将其强制转换为不是Animal的子类的类则会得到ClassCastException。在本质上如果secondDog保持为Animal(未被转换为Dog)则它只能访问Animal中的所有非私有字段和方法。如果secondDog被转换为Dog它可以从Animal访问所有继承的字段和方法以及Dog中的所有非私有字段和方法。是的我明白。 当我没有投放到Dog时我只能访问Animal的所有非私有字段和方法。 但是如果我在Dog类中覆盖其中一个方法我会在主函数中得到覆盖的一个吗azuosxela你是对的它被重写的方法你将在子类中调用重写的方法。 例如如果你做System.out.println(secondDog); (即使没有强制转换)它也会从Dog类调用toString()。不不可能通过Animal类访问Dog的属性。考虑许多子类流动的基础对象对象。你可以说JFrame frame new JFrame();要么Object objFrame new JFrame();帧。将允许您访问所有JFrame的属性objFrame。???只会让您访问Object的属性。我不敢问为什么secondDog应该被创建为动物而不是狗:)施放Animal对象以显示它是一只狗Dog secondDog (Dog) new Animal(alex);看看这个Animal a new Dog();Dog d (Dog) a; // no problem, the type animal can be casted to a dog, because its a dogCat c (Dog) a; // raises class cast exception, you cant cast a dog to a cat仅在它是子类时才转换。充分尊重; 这完全是胡说八道。 关键是你告诉java编译器secondDog的类型是Animal。 动物是一种动物; 而不是狗。 额外的演员阵容不会改变任何东西(在这种情况下)。 当然当你知道你的动物是一只狗时你可以把动物送到狗; 并使用狗的方法。 但这不是你的代码正在做的事情。