Stack Overflow на русском Asked by Maria2000 on December 25, 2020
Дана задача сделать метод который принимает массив с одежой и выводит информацию о мужской одежде в классе Studio (классы Tshirt, Pants и Tie). Пыталась сначала сжделать геттеры в методе Tie и как вариант сделать метод toString(), но не получается их вызвать в методе из класса Studio. Подскажите пожалуйста, как это можно сделать?
public interface MenClothing {
public void menGo();
}
public abstract class Clothing {
public Razmer sizeClothing;
int priceClothing;
String colorClothing;
String name;
}
public enum Razmer {
xxs(32), xs(34), s(36), m(38), l(40);
private int euroSize;
public int getEuroSize(){
return euroSize;
}
Razmer(int euroSize){
this.euroSize=euroSize;
}
public String getDescription(String slovo){
if (slovo=="xxs"){
return "detskii размер";
}
else
return "Взрослый размер";
}
}
public class Tshirt extends Clothing implements MenClothing{
Tshirt(Razmer sizeClothing, int priceClothing, String colorClothing){
this.sizeClothing=sizeClothing;
this.priceClothing=priceClothing;
this.colorClothing=colorClothing;
name="Tshirt";
}
@Override
public void menGo() {
System.out.println("men odel thirt");
}
}
public class Pents extends Clothing implements MenClothing {
Pents(Razmer sizeClothing, int priceClothing, String colorClothing){
this.sizeClothing=sizeClothing;
this.priceClothing=priceClothing;
this.colorClothing=colorClothing;
name="Pents";
}
Pents(){
name="Pents";
}
@Override
public void menGo() {
System.out.println("men odel pants");
}
}
public class Tie extends Clothing implements MenClothing {
Tie(Razmer sizeClothing, int priceClothing, String colorClothing){
this.sizeClothing=sizeClothing;
this.priceClothing=priceClothing;
this.colorClothing=colorClothing;
name="Tie";
}
Tie(){name="Tie";}
**public Razmer getSize(){
return sizeClothing;
}
public int getPrice(){
return priceClothing;
}
public String getColor(){
return colorClothing;
}**
public Tie t;
@Override
public void menGo() {
System.out.println("men odel tie");
}
@Override
**public String toString()
{
return "clothing{" + "size" + sizeClothing+ ", price='" + priceClothing + ''' + ", color" + colorClothing + '}';**
}
}
**public class Studio extends Clothing {
public void menGo2(Clothing[] clothing) {
Tie test = new Tie();
Pents pents=new Pents();
System.out.println(test.name+pents.name);
}
}**
public class Main {
public static void main(String[] args) {
Clothing[] clothing=new Clothing[4];
clothing[0]=new Tshirt(Razmer.xxs, 1000, "orange");
clothing[1]=new Pents(Razmer.xxs, 2000, "orange");
clothing[2]=new Skirt(Razmer.xs, 1000, "orange");
clothing[3]=new Tie(Razmer.m, 1000, "orange");
Studio st=new Studio();
int k=0;
for(Clothing i:clothing){
st.menGo2();
k++;
}
}}
Заранее спасибо!
Не вызывайте instanceof. В большей части случаев это свидетельствует о кривой архитекутре. Задумайтесь сами: вы приводите созданный экземпляр класс к переменной типа интерфейса, а потом у этой переменной спрашиваете, что там у тебя лежит и кастуете обратно. Это , как минимум, нелогично. Вместо этого спроектируйте свои классы. Вы допустили ошибку при создании иерархии классов. У вас получилось, что мужская одежда не относится к одежде, потому как мужская одежда - отдельный интерфейс, а одежда - абстрактный класс. Измените иерархию классов и все станет проще без всяких instanceof и прочих костылей.
public abstract class Clothing {
private final Razmer sizeClothing;
private final int priceClothing;
private final String colorClothing;
private final String name;
public Clothing(Razmer sizeClothing, int priceClothing, String colorClothing, String name) {
this.sizeClothing = sizeClothing;
this.priceClothing = priceClothing;
this.colorClothing = colorClothing;
this.name = name;
}
public Razmer getSizeClothing() {
return sizeClothing;
}
public int getPriceClothing() {
return priceClothing;
}
public String getColorClothing() {
return colorClothing;
}
public String getName() {
return name;
}
public abstract String go();
@Override
public String toString() {
//переопределите данный метод по вашему усмотрению, чтобы получать корректный вывод в консоль
return "Clothing{" + "sizeClothing=" + sizeClothing + ", priceClothing=" + priceClothing + ", colorClothing=" + colorClothing + ", name=" + name + '}';
}
}
public abstract class MenClothing extends Clothing{
public MenClothing(Razmer sizeClothing, int priceClothing, String colorClothing, String name) {
super(sizeClothing, priceClothing, colorClothing, name);
}
@Override
public String go(){
return "men odel " + getName();
}
}
public enum Razmer {
XXS(32, "Детский размер"),
XS(34, "Взрослый размер"),
S(36, "Взрослый размер"),
M(38, "Взрослый размер"),
L(40, "Взрослый размер");
private final int euroSize;
private final String description;
private Razmer(int euroSize, String description) {
this.euroSize = euroSize;
this.description = description;
}
public int getEuroSize() {
return euroSize;
}
public String getDescription() {
return description;
}
}
public class Studio {
public void menGo2(Clothing[] clothings) {
for (Clothing clothing : clothings) {
//выбирайте метод , который вам нужен
System.out.println(clothing);
System.out.println(clothing.go());
}
}
}
import static xxx.Razmer.*;
public class Main {
public static void main(String[] args) {
Clothing[] clothing = {
new Tshirt(XXS, 1000, "orange"),
new Pents(XXS, 2000, "orange"),
new Skirt(XS, 1000, "orange"),
new Tie(M, 1000, "orange")
};
new Studio().menGo2(clothing);
}
}
public class Pents extends MenClothing {
public Pents(Razmer sizeClothing, int priceClothing, String colorClothing) {
super(sizeClothing, priceClothing, colorClothing, "Pents");
}
}
public class Skirt extends MenClothing {
public Skirt(Razmer sizeClothing, int priceClothing, String colorClothing) {
super(sizeClothing, priceClothing, colorClothing, "Skirt");
}
}
public class Tie extends MenClothing {
public Tie(Razmer sizeClothing, int priceClothing, String colorClothing) {
super(sizeClothing, priceClothing, colorClothing, "Tie");
}
}
public class Tshirt extends MenClothing {
public Tshirt(Razmer sizeClothing, int priceClothing, String colorClothing) {
super(sizeClothing, priceClothing, colorClothing, "Tshirt");
}
}
Correct answer by Дмитрий on December 25, 2020
Маша я бы сделал бы так: ТЗ "Принимать массив содержащий все типы одежды и выводить в консоль все типы мужской одежды"
public class Studio extends Clothing {
public void menGo2(Clothing[] clothing) {
for(Clothing thing : clothing) //Проходим по всем элементам массивам
if(thing instanceof MenClothing) //Проверяем является ли экземпляр интерфейсом менклозес
System.out.println(thing);
}}
Answered by Andrew Kachalin on December 25, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP