Можем ли мы создать конструктор и методы в одном классе? - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь определить конструктор и метод в отдельном классе и получить к нему доступ из метода основного класса. Но я получаю сообщение об ошибке «Конструктор ConstructorConcept () не определен», когда пытаюсь вызвать метод read (), как показано ниже. Мой вопрос в том, как мы обычно создаем объект для класса и получаем доступ к его свойствам. Тогда почему он показывает ошибку при доступе к методу read ()? Разве мы не можем определить методы и конструкторы в одном классе?

public class ConstructorConcept {

    String Location;
    String StateName;
    int CityCounts;
    int m=10, n=20;
    int sum;

    public void read() {
        sum=m+n;
        System.out.println(sum);
    }

    ConstructorConcept (String a,String b,int x)
    {
        this.StateName=a;
        this.Location=b;
        this.CityCounts=x;
    }

    ConstructorConcept (String i,String j)
    {
        this.StateName=i;
        this.Location=j;
    }

}


public class ConstructorMainClass {

    public static void main(String[] args) {
        // TODO Auto-generated method stub


        ConstructorConcept v1=new ConstructorConcept("Victoria","Australia",12);
        ConstructorConcept v2= new ConstructorConcept ("VIC", "AUS");
        System.out.println(v1.StateName+ " " +v1.Location+ " " +v1.CityCounts);
        System.out.println(v2.StateName+ " " +v2.Location);

        ConstructorConcept v3= new ConstructorConcept();            
        v3.read();
        System.out.println(v3.m);                               
    }
}

Ответы [ 4 ]

3 голосов
/ 08 мая 2020

Проблема в этой строке

ConstructorConcept v3= new ConstructorConcept();

Здесь вы вызываете пустой конструктор, которого нет в классе ConstructorConcept. Добавьте это объявление constrcutor в свой класс ConstructorConcept, и он будет работать: -

ConstructorConcept(){
}
0 голосов
/ 08 мая 2020

Да, мы можем определять методы и конструкторы в одном классе. Как я вижу ваш код, вы пытаетесь создать экземпляр объекта, в то время как конструктор с нулевым аргументом, которого нет в вашем классе ConstructorConcept, записывает этот конструктор перед вызовом метода чтения.

0 голосов
/ 08 мая 2020

Стандартный Java У Pojo есть ограничения на доступ к файлам для других пользователей. public, default, private.
И вам нужен constructor по умолчанию, поскольку у вас уже есть собственные подрядчики. Если у вас нет constrcutors, подрядчик по умолчанию добавляется автоматически.
В вашей ситуации я думаю, что приведенный ниже код более подходит:

public class ConstructorConcept {

    String Location;
    String StateName;
    int CityCounts;
    int m=10, n=20;
    int sum;

    public void read() {
        sum=m+n;
        System.out.println(sum);
    }

    ConstructorConcept (String a,String b,int x)
    {
        this.StateName=a;
        this.Location=b;
        this.CityCounts=x;
    }

    ConstructorConcept (String i,String j)
    {
        this.StateName=i;
        this.Location=j;
    }

    //you need all the getters/setters to access fields
    public String getLocation() {
        return Location;
    }

    public void setLocation(String location) {
        Location = location;
    }

    public String getStateName() {
        return StateName;
    }

    public void setStateName(String stateName) {
        StateName = stateName;
    }

    public int getCityCounts() {
        return CityCounts;
    }

    public void setCityCounts(int cityCounts) {
        CityCounts = cityCounts;
    }

    public int getM() {
        return m;
    }

    public void setM(int m) {
        this.m = m;
    }

    public int getN() {
        return n;
    }

    public void setN(int n) {
        this.n = n;
    }

    public int getSum() {
        return sum;
    }

    public void setSum(int sum) {
        this.sum = sum;
    }
    // you need a default Constructor
    public ConstructorConcept() {
    }
}


public class ConstructorMainClass {

    public static void main(String[] args) {
        // TODO Auto-generated method stub


        ConstructorConcept v1=new ConstructorConcept("Victoria","Australia",12);
        ConstructorConcept v2= new ConstructorConcept ("VIC", "AUS");
        System.out.println(v1.getStateName()+ " " +v1.getLocation()+ " " +v1.getCityCounts());
        System.out.println(v2.getStateName()+ " " +v2.getLocation());

        ConstructorConcept v3= new ConstructorConcept();
        v3.read();
        System.out.println(v3.m);
    }
}

0 голосов
/ 08 мая 2020

V3 неверен, у вас нет конструктора без аргументов. У меня работают другие экземпляры.

Вы можете добавить новый конструктор без каких-либо параметров или добавить недостающие значения в экземпляр v3

...