public class Main {
public class Cat {
public String name;
public int age;
public int weight;
public Cat(String name, int age, int weight) {
this.name = name;
this.age = age;
this.weight = weight;
}
public Cat() {
}
public void sayMeow() {
System.out.println("Мяу!");
}
}
public static void main(String[] args) {
Cat cat = new Cat();
cat.name = "";
cat.age = -1000;
cat.weight = 0;
}
}
Орест
24 уровень
почемуто IDEA говорит што Cat cat = new Cat(); java: non-static variable this cannot be referenced from a static context помогите:
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
6 апреля 2021, 09:24
Два варианта решения:
1 вариант.
Поменяй строку:
на
2 вариант:
поменяй строку
на
Про внутренние и вложенные классы на джава раше будет в третьем квесте (Мультипоточность).
Пока что запомни, что есть вложенные классы, это класс, который находится внутри другого класса
Если вложенный класс статический, например в этой ситуации если поменять на:
то экземпляр этого класса (вложенного статического) можно создавать так:
или за пределами класса в котором находится вложенный:
Модификатор static говорит о том, что вложенный класс не зависит от того класса, в котором находится.
Другое дело внутренний класс. Внутренний класс это вложенный класс, который не является статическим:
Внутренний класс может создаваться только в рамках экземпяра класса, в котором он находится.
То есть внутрнний класс не может существовать без экземпляра класса, в котором находится.
Поэтому экземпляр внутреннего класса создается так:
или
То есть для создания экземпляра внутреннего класса мы используем экземпляр внешнего. +17
Vlad
12 ноября 2021, 16:51
Большое спасибо!! все просто и ясно👍
+2
JohanLvovich
9 декабря 2021, 10:21
Спасибо за ответ, и я хотел бы попросить уточнения.
Есть класс Outer, который содержит вложенный статический класс Nested и внутренний класс Inner. Я пытался создать в классе Solution в методе main() по объекту каждого класса, но IDEA начала ругаться
При попытке создать переменную inner выдаёт "Cannot resolve symbol 'Inner'", хотя, она создана по примеру: сначала объект внешнего класса, затем внутреннего.
Подскажите, пожалуйста, что может быть не так +1
Justinian Judge в Mega City One Master
9 декабря 2021, 11:50
На будущее, старайся предоставлять код, у тебя код ссылается на Outer, Nested, Inner, прилагай их к примеру, поскольку ошибка может быть где угодно, объектом оценки и анализа является весь код.
Inner это публичный НЕвложенный класс, находящийся в том же пакете, что и Solution?
По твоему описанию - нет.
А значит тебе компилятор и пишет, знать не знаю такой класс. Нету такого самостоятельного класса, в этом суть внутренних классов, да и внешний посмотри как ты создаешь:
отчего же у тебя тогда просто
К вложенным классам мы обращаемся по их идентификатору - имени, но должно присутствовать имя внешнего класса
Можно конечно и так
если сделать
Но без такого иморта, вложенные классы извне создаются через
ИмяВнешнегоКласса.ИмяВложенногоКласса 0
Di Ma Java Developer в Сбер
6 апреля 2021, 09:23
Класс Cat вложенный в не статичный класс , нужен инстансс Main
Main main = new Main();
Cat cat = main.new Cat();
либо класс cat сделать статичным и будем иметь всего одного кота
+1
Орест
6 апреля 2021, 09:13
проблема именно в етой строке :(((
0