Java中的Extends和New之间有什么区别?

时间:2019-02-13 23:19:28

标签: java

假设您有一个称为超类的类。

我可以说

lift

我可以做到

StateT s Parser

这两种方法都允许我在该类中使用方法/变量。有人可以使图片更清晰吗?

1 个答案:

答案 0 :(得分:2)

因此,关于什么是类以及什么是实例存在误解。 Java中的每个对象都由一个类定义。该类是一组字段和方法,它们定义了类实例的行为。

假设您有一堂课Foo

class Foo {
    int foo() {
        return 0;
    }
}

要调用foo,我需要创建该类的实例。

Foo f = new Foo();
System.out.println(f.foo());

实例化一个类很有用的一个原因是,因为您可以创建多个对象,它们的行为略有不同。以Foo

的修改版为例
class Foo {
    int i;
    Foo(int i) {
        this. i = i;
    }
    int foo() {
        return i;
    }
}

在此示例中,我向Foo添加了一个名为i的字段,并添加了一个构造器来设置i。现在,我可以使用Foo的不同值来实例化i

Foo f1 = new Foo(1);
Foo f2 = new Foo(2);
System.out.println(f1.foo());
System.out.println(f2.foo());
// prints 1 2

扩展类时,可以更新,添加或覆盖Foo中的方法

class Bar extends Foo {
    Bar(int i) {
        super(i); // call Foo's constructor too
    }
    int bar() {
        return i * 2;
    }
}

注意如何仍然可以使用方法foo,但也可以使用额外的方法bar

Bar b = new Bar(3);
System.out.println(b.foo());
System.out.println(b.bar());
// prints 3 6