簡體   English   中英

如何覆蓋在另一個已繼承的類中被賦予值的變量

[英]How do I override the variable that was given a value to in another class which has been inherited

我試圖讓用戶輸入超級類中汽車的座位數,但是要創建一種方法來打印子類“汽車”中的座位數。 但是,當我聲明存儲用戶輸入的變量時,出現錯誤,指出該變量不可見,這是因為它在另一個類中。

import java.util.Scanner;

class Vehicle {

    Scanner s = new Scanner(System.in);
    private String color;
    private int noOfCylinders;
    private int noOfSeats;

    public Vehicle() {
        color = "Black";
        noOfCylinders = 0;
        noOfSeats = 1;
    }

    public Vehicle(String color, int noOfCylinders, int noOfSeats) {
        this.color = color;
        this.noOfCylinders = noOfCylinders;
        this.noOfSeats = noOfSeats;
    }

    public void getColor() {
        System.out.print("Enter color of vehicle: ");
        color = s.nextLine();
    }

    public String setColor() {
        return color;
    }

    public void getNoOfCylinders() {
        System.out.print("Enter number of cylinders: ");
        noOfCylinders = s.nextInt();
    }

    public int setNoOfCylinders() {
        return noOfCylinders;
    }

    public void getNoOfSeats() {
        System.out.print("Enter numer of seats: ");
        int noOfSeats = s.nextInt();
    }

    public String toString() {
        String information;
        information = "is " + color + " and it has " + noOfCylinders + " cylinders.";
        return information;
    }
}

public class CreateVehicle {
    public static void main(String[] args) {

        Car CarObject = new Car();
        Truck TruckObject = new Truck();

        CarObject.getColor();
        CarObject.setColor();
        CarObject.getNoOfCylinders();
        CarObject.setNoOfCylinders();
        CarObject.toString();
        CarObject.getNumOfSeats();

        TruckObject.getColor();
        TruckObject.setColor();
        TruckObject.getNoOfCylinders();
        TruckObject.setNoOfCylinders();
        TruckObject.toString();

        System.out.print(("\nThe car ")+CarObject.toString());
        System.out.print(("\nThe truck ")+TruckObject.toString());      
    }
}


class Car extends Vehicle{

    public void getNumOfSeats(){
        System.out.print("\nThe car has " + noOfSeats + " seats.");
    }
}


    class Truck extends Vehicle {
        public void printTowingCapacity() {
            System.out.print("\nThe car has " + towingCapacity + ".");
        }
    }

如果要將變量設為私有,可以使用父類的公共函數getNoOfSeats()。

class Car extends Vehicle{
   public void getNumOfSeats(){
      System.out.print("\nThe car has " + super.getNoOfSeats() + " seats.");
   }
}

或者只是將變量noOfSeats更改為受保護或受包保護的變量,

noOfSeats是該類的私有成員,任何其他類都無法訪問。 如果要使它可以從繼承的類訪問,請使其對說明符的訪問權限為protected。

基於OOP概念,您甚至不能在子類中訪問課外的私有變量。

在這里您聲明

 private int noOfSeats;

並且您嘗試在子類的類外部訪問它,這超出了私有變量范圍。

要在子類中訪問它,請使noOfSeats變量

 public int noOfSeats;

要么

 protected int noOfSeats;

在車輛類中。

如果要將noOfSeats變量設置為私有變量,請在車輛類(父類)上基於public函數創建並從Car類(子類)調用它。

您正在嘗試訪問

 System.out.print("\nThe car has " + towingCapacity + ".")

Truck類中的towingCapacity變量,而您沒有在Vehicle類或Truck類中聲明它。

因此,首先聲明它,然后使用它。

有關Java訪問修飾符的更多詳細信息,請閱讀本文。

https://www.softwaretestingmaterial.com/access-modifiers-in-java/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM