2014-01-28 57 views
0

我一直在想这个真的很多。我听到很多人提到他们,但不知道他们究竟是什么。我假设它们在所有基于类的语言中都是相同的(如果不是,那么它们在Java中是什么?)。什么是子类和超类?

对不起,我的无知,但我正在学习Java和我的书只解释了基础知识。

+0

分别有越来越少的指定类。父类(父类)的子类(子类)可以(通常)执行父类可以做的所有事情,并且包含所有相同类型的数据。但它不仅仅是父母。类树表示可能具有诸如年龄和高度之类的数据,但是子类可能具有更具体的事物。 MapleTree可能是一个子类,并且具有额外的特定数据,比如“糖浆美味”,或者像“获得糖浆”这样的超类不可能的操作。超类更加灵活通用,子类更具体。 – Lucas

回答

0

子类扩展超类。他们使用他们超类的一些或全部功能,但也有他们自己的一些独特的功能。两个不同的类可以扩展相同的超类并共享其功能。这样,您就不必将超类中的代码复制到两个子类中。

例如:假设你有两个班级,一只猫和一只鹦鹉。他们是这样的:

class Animal { 
    private int speed; 
    private String name; 
    private String sound; 

    public void makeSound() { 
     //make a sound. 
    } 
} 

class Cat extends Animal { 

    public void attack() { 
     //attack some prey 
    } 
} 

class Parrot extends Animal { 

    public void fly() { 
     //fly away 
    } 
} 

你可以在我的最后一个例子见猫和鹦鹉都有一个速度统计,一个名字:

class Cat { 
    private int speed; 
    private String name; 
    private String sound; 

    public void meouw() { 
     //make a sound. 
    } 

    public void attack() { 
     //attack some prey 
    } 
} 

class Parrot { 
    private int speed; 
    private String name; 
    private String sound; 

    public void talk() { 
     //make a sound. 
    } 

    public void fly() { 
     //fly away 
    } 
} 

现在,你可以使用继承做得更好和一个声音。他们都可以使用makeSound()方法。另外,每个也都有自己的方法。

如果需要,还可以重写超类中的方法并添加额外的功能。

@Override 
public void someMethod() { 
    super.someMethod(); 
    //extra functionality... 
} 

super.someMethod()调用超类中的方法。如果你这样做,你也可以从超级方法中获得功能。如果你不这样做,超类中的方法永远不会执行。

+0

谢谢。这是一个很好的解释。事实证明,我之前使用过很多子类,只是不确定他们的名字。 –

0

这与继承有关。

解释这一点的最好办法是通过一个例子:

考虑这个Vehicle类:

class Vehicle { 

int doors = 4; 
int wheels = 4; 
bool rolling = false; 

int getDoors() 
{ 
    return this->doors; 
} 

int getWheels() 
{ 
    return this->wheels; 
} 

float cost() 
{ 
    return price; 
} 

bool isRolling() 
{ 
    return this->rolling; 
} 

}

这是具有任何类型的车辆可以有功能性的父类。这使得它成为一个抽象类。

这里的一个子类,其中 '继承' 车辆的功能:

class Honda : Vehicle { 
    float price = 3000.0; 
} 

和另一个品牌(这一个是更昂贵)

class Ferrari : Vehicle { 
    float price = 987654321.0; 
} 

所以现在,当我们说:

Honda accord = new Honda(); 

我们得到一个本田实例。

Ferrari spider360 = new Ferrari(); 

他们的车辆两个子类,但每个人都有自己的属性,而是属于Vehicle相同的父类。