Java 访问父类方法和变量

Java 访问父类方法和变量,java,inheritance,polymorphism,Java,Inheritance,Polymorphism,我在同一个包中有以下3个类: class Machine { protected int id; public Machine(int i) { id = i; } public void start() { System.out.println("Machine " + id + " starting."); } } class Car extends Machine { protected int id

我在同一个包中有以下3个类:

class Machine {

    protected int id;

    public Machine(int i) {
        id = i;
    }

    public void start() {
        System.out.println("Machine " + id + " starting.");
    }
}

class Car extends Machine {

    protected int id;

    public Car(int i) {
        super(i);
        id = i;
    }

    public void start() {
        super.start();
        System.out.println("Car " + id + " starting.");
        System.out.println("I can access parent variable" + super.id);
    }
}

public class Application {

    public static void main(String[] args) {
        Machine machine = new Machine(2);
        Car car = new Car(3);

        car.start();
        machine.start();
        machine = car;
        machine.start();
    }
}
我现在有几个问题要问。请让我知道,如果我不再有意义,我会尝试重新措辞

  • 我可以从主类访问car.super方法和变量吗 ? 如果是,怎么做
  • 当我实例化一个Car对象时,我还必须初始化 通过调用机器类的构造函数创建该类的成员。是这样吗 也就是说,当我创建一个新的汽车对象时,总内存 使用的是汽车物体的大小+机器的大小 反对
  • 当我在两个类中都有相同的变量“id”并访问它时 使用一个Car对象,我得到了汽车的id,但是当我只有在 机器类并访问它,我将获得机器“id”。是这样吗 这意味着本质上我是在覆盖机器“id”。我是 假设成员变量不能被覆盖, 只有方法可以

  • 1.受保护的数据成员只能通过聚合类访问。 2.不知道。 3.这是动态绑定的一个示例。这保留了opps特性,其中父类需要显式转换来指向聚合类。

    2)在为操作分配内存时,不存在超类和子类的概念。Java查看字段和实例所需的内存。它将查看
    Machine
    的实例并为int
    id
    分配内存,然后查看
    Car
    的实例,发现内存已经在父级中分配,并简单地分配值

    如果您的
    Car
    类有一个标记为
    number
    id
    的字段,那么内存将分配给两个字段


    看看这个家伙:

    你应该读一些关于你的标签的教程:继承、多态,但它们遗漏了一些细节。1。对请参阅:其他信息:如果数据成员是公共的,将如何处理。1的答案将更改?