十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
下面是一个简单的 Java 程序示例,用于实现山羊和狼的继承关系,并在测试类中进行验证:
在申扎等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计、网站制作 网站设计制作按需开发网站,公司网站建设,企业网站建设,高端网站设计,营销型网站建设,外贸网站制作,申扎网站建设费用合理。
Animal.java:
```java
public abstract class Animal {
public void walk() {
System.out.println("走路");
}
public abstract void eat();
}
```
Goat.java:
```java
public class Goat extends Animal {
@Override
public void eat() {
System.out.println("吃草");
}
}
```
Wolf.java:
```java
public class Wolf extends Animal {
@Override
public void eat() {
System.out.println("吃肉");
}
}
```
AnimalTest.java:
```java
public class AnimalTest {
public static void main(String[] args) {
Goat goat = new Goat();
wolf wolf = new wolf();
goat.eat(); // 输出:吃草
wolf.eat(); // 输出:吃肉
goat.walk(); // 输出:走路
wolf.walk(); // 输出:走路
}
}
```
在此程序中,我们定义了一个 `Animal` 类作为基类,包含了所有动物都会有的行为(例如走路),并使用抽象方法 `eat()` 表示不同动物的饮食习惯。然后通过继承实现 `Goat` 和 `Wolf` 两个子类,并分别重写 `eat()` 方法。
在测试类中,我们分别创建了一个 `Goat` 和一个 `Wolf` 对象,并分别调用其 `eat()` 和 `walk()` 方法进行验证。可以看到,不同的动物具备不同的饮食习惯,但它们的走路行为是一致的。
java中扩展类的初始化过程是这样的,最初虚拟机会依次递推找到最上层的父类,执行完类加载与静态成员的初始化;当main函数中执行代码,产生某个子类对象时,再依次递归找到最上层的父类先进行成员初始化(对象引用没有直接赋值就初始化为Null),再调用相应的构造器产生对象,然后逐层的进行对象初始化直到最底层的子类。
所以你的问题的解答应该是如果那个引用有用new进行对象实例化,就会先调用父类成员引用的构造方法初始化成员变量,没有初始化只是定义就会初始化为Null,然后再调用父类的构造器继续初始化的。。。= =。java类的初始化都是先初始化非静态成员(就是那个基本变量int,float什么会初始化为0啊,char会初始化为空字符啊,boolean初始化false啊神马那个,对象引用则是null),再调用构造函数初始化的。
Coat 类没有Coat()这个构造函数,你只定义了一个有参数的构造函数。如下。
class Coat extends InnerClassTest.Clothes
{
public Coat(InnerClassTest o)
{
o.super();
}
}
想要不报错,加上一个Coat()构造函数,或者new的时候加一个参数就行。