我根本不了解遗产。 从我所读过的内容来看,继承意味着一个子类或子类可以继承"继承"或检索?来自其父/超类的方法和值。
我有点理解this example,但对我来说还不是很清楚。
如果我要在动物身上发表if声明,做鸟和狗,还可以获得if声明吗?
这是实际的代码,我没有完成主要课程的最后一部分,因为它对我来说有点清楚。
同样,System.out.println()
在主类中的作用是打印所有字符串吗?
为什么我单独运行这些类时实际上没有打印出来,但是当我运行主类时,一切都会打印出来?
public class Animal {
public Animal() {
System.out.println("A new animal has been created!");
}
public void sleep() {
System.out.println("An animal sleeps...");
}
public void eats() {
System.out.println("An animal eats...");
}
}
然后是小鸟
public class Bird extends Animal {
public Bird() {
super();
System.out.println("A new bird has been created!");
// TODO Auto-generated constructor stub
}
public void sleep() {
System.out.println("A bird sleeps...");
}
public void eats() {
System.out.println("A bird eats...");
}
}
然后是狗
public class Dog extends Animal {
public Dog() {
super();
System.out.println("A new dog has been created!");
// TODO Auto-generated constructor stub
}
public void sleep() {
System.out.println("A dog sleeps...");
}
public void eats() {
System.out.println("A dog eats...");
}
}
那么这个主要的课程
public class MainClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal animal = new Animal();
Bird bird = new Bird();
Dog dog = new Dog();
System.out.println();
}
}
答案 0 :(得分:2)
我会尝试用最简单的方式解释:
Animal
是super class
。
每个animal
sleeps
和eats
,因此方法位于super class
当您创建特定动物的对象时。
Animal animal = new Animal();
调用Animal
的构造函数print:
System.out.println("A new animal has been created!");
Bird bird = new Bird();
调用Bird
之后super()
的构造函数转到Animal
的构造函数,因此打印sysouts
Dog dog = new Dog();
与Dog
System.out.println()究竟在主类中做什么?
它实际上什么都不做。如果删除它,代码仍将打印。 尝试一下。
答案 1 :(得分:0)
简单地说,如果一个人延长了'动物类到猫类,猫类继承了所有动物类的方法。这意味着你不必两次写这些方法,因为像任何动物一样,猫吃,睡觉,走路等等...... 然后你可以写下cat类中的特定方法,比如purr!(或者你可能想要一个哺乳动物的类,而一个类的felines tath继承自那些......
答案 2 :(得分:0)
how come when i run the classes separately nothing actually prints out, but when i run main class, everything prints?
JAVA代码需要main
方法才能开始执行。因此,当您运行其他类时,它将找不到主方法,因此它不会打印任何内容。
在inheritance
中,只有您声明的变量和方法被继承(传递)到子类。其他事情都属于子类。
例如:
考虑一下你和爸爸之间的关系。你爸爸是这里的超级班,你是子班。你有一些你爸爸的所有属性,但它们可能不一样。就像你的眼睛和你爸爸一样,但它们的颜色可能不同。 if
声明可以被视为您父亲做出的任何决定,但您不必做出决定,因此与您无关。
System.out.println();
中的{p> mian
没有做任何额外的事情。你可以删除它。
我希望这对你有所帮助。如果您有任何疑问,请问我。
答案 3 :(得分:0)
继承提供' IS A '关系。狗是A 动物。一只鸟是一只动物。
如果一个类继承自另一个类,则意味着它将能够调用该类中的方法,就好像它们是自己的一样。
您将了解的一个用途是多态性。一个例子是迭代Animal对象列表的能力,每个Animal对象可以是Animal,Bird或Dog,调用超类的方法,Java将在运行时将调用重定向到适当的类。因此,如果你在主类中有一个for循环,你可以这样做:
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal animal = new Animal();
Bird bird = new Bird();
Dog dog = new Dog();
ArrayList<Animal> animalList = new ArrayList<Animal>();
animalList.add(bird);
animalList.add(dog);
//for each animal in the animal list
for(Animal : animalList){
sleeps();
eats();
}
此代码将通过一个动物列表输出睡眠和吃鸟和狗对象的调用。
希望这有帮助!
答案 4 :(得分:0)
试试这个,
public class Cat extends Animal {
public Cat() {
super();
System.out.println("A new cat has been created!");
}
}
然后在main中,
Cat cat = new Cat();
cat.eats();
这将打印&#34;动物吃...&#34;。 Cat有来自Animal的eats()方法,因为它扩展了Animal。这个例子对我来说更有意义,因为它所继承的方法没有被覆盖。
答案 5 :(得分:0)
与你给出的例子非常相似,我将首先解决这个简单的问题。 System.out.println(); main方法中的语句只是打印一个空行。现在解释一下代码的每个部分。
Animal animal = new Animal();
这段代码创建一个Animal对象并调用构造函数。
public Animal() {
System.out.println("A new animal has been created!");
}
接下来叫做 鸟鸟=新鸟(); 这将创建一个Bird对象并调用构造函数。
public Bird() {
super();
System.out.println("A new bird has been created!");
// TODO Auto-generated constructor stub
}
super()的作用是调用超类的构造函数,在这种情况下,超类是Animal。考虑到这一点,鸟类构造函数的输出应该是
A new animal has been created!
A new bird has been created!
由于鸟有自己的睡眠和吃法,因此Animal方法会被覆盖。 bird.eat()的输出将是
A bird eats...
同样,bird.sleep()的输出将是
A bird sleeps...
当Dog Dog = new Dog()时创建Bird;被称为创建一个Dog对象并调用构造函数,因为Dog类在调用Dog构造函数时扩展Animal,它首先调用超类构造函数,然后继续使用Dogs构造函数。即使没有调用super();也会发生这种情况。像前面显示的bird类一样的Dog类也会覆盖它从超类继承的.eat()和.sleep()方法,并且行为在同一个庄园中。
答案 6 :(得分:0)
首先,主类中的System.out.println()仅打印一个新行。 这个方法接受一个字符串参数(或者没有上面的参数)并打印字符串后跟一个新行,这样你就不必每次打印一个新行时手动输入新的换行符代码(\ n我相信)线。 System.out.print()执行相同的操作,但它不会创建新行。
在示例输出中,main.java中的System.out.println()是“已创建新狗”之间的空行。和“动物睡觉......”
其他所有方法都打印在方法中,例如:System.out.println(“狗吃......”); 尝试替换System.out.println(“狗吃......”);与System.out.print(“狗吃...... \ n”); 如果\ n确实是新行的正确转义,它应该具有相同的输出。 注意我将“println”更改为“print”并将\ n添加到字符串的末尾。
当你运行除主类之外的任何东西时没有任何反应的原因是因为main(String [] args)是初始化方法。这是程序运行时要查找的内容。把它想象成代码的点火 - 没有点火,计算机把钥匙放在哪里启动程序?您可以在设置中更改此设置,但我现在不担心
我认为在迁移到继承之前,您应该尝试理解这些概念,因为它们涉及代码的基本流程以及如何生成输出。