继承示例说明,编码和方法等?

时间:2014-12-16 15:32:21

标签: java inheritance

我根本不了解遗产。 从我所读过的内容来看,继承意味着一个子类或子类可以继承"继承"或检索?来自其父/超类的方法和值。

我有点理解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();
}

}

7 个答案:

答案 0 :(得分:2)

我会尝试用最简单的方式解释:

Animalsuper class

每个animal sleepseats,因此方法位于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)是初始化方法。这是程序运行时要查找的内容。把它想象成代码的点火 - 没有点火,计算机把钥匙放在哪里启动程序?您可以在设置中更改此设置,但我现在不担心

我认为在迁移到继承之前,您应该尝试理解这些概念,因为它们涉及代码的基本流程以及如何生成输出。