@newdancer

Как можно передавать в метод объекты разных классов?

Как можно передавать в метод объекты разных классов?
К примеру есть метод:
public int calc(String data, Object value, Boolean rez)

как после обратиться к переменным нужного класса переданных в метод?
  • Вопрос задан
  • 1256 просмотров
Пригласить эксперта
Ответы на вопрос 4
@zelan
Кратко обо мне не получится.
Те объекты которые ты хочешь передавать - должны ли они по логике твоей программы иметь общие методы (чтобы воспользоваться ТОЛЬКО ими в методе, в который ты передаешь объект) или ты хочешь передавать совершенно разные объекты?
Update:
смотри, есть такая штука как интерфейс

Например есть 2 класса Cat и Dog. И есть действия которые и тот и другой обязаны делать (по разному) но с определенным результатом. Например это действие - поедание котлет, при этом если есть результат (то он должен быть единообразным) или его быть не должно вовсе (void). Таким образом классы должны выглядеть примерно так (опуская другие вещи)

class Cat{
 public int eatBeaf(int weight){ 
  //тут описываем съедение
  
  return result; //результат - продукт переработки котлет
 }
}

class Dog{
 public int eatBeaf(int weight){ 
  //тут описываем съедение
  
  return result; //результат - продукт переработки котлет
 }
}


И допустим у тебя есть Бабуля, которой ты передаешь животное на выходные и она должна будет их кормить периодически. Согласись - бабуле пофигу кто будет пожирать котлеты, она не хочет кормить их по разному, ей важно только то, что бы они ели котлеты и она убирала продукты пищеварения.

Соответственно иметь 2 метода у бабули не хочется:
class GrandMa{
 public void feedCat(Cat cat){}
 public void feedDog(Dog dog){}
}


Вот тут и появляются интерфейсы. Мы видим, что и кот и пес жрут котлеты. Давай скажем что они как животные должны их (котлеты) поедать - это интерфейс.

interface BeafEater{
  int eatBeaf(int weight);
 }
//и скажем что и кот и пес - пожиратели котлет и они умеют их есть

class Cat implements BeafEater{
 public int eatBeaf(int weight){ 
  //тут описываем съедение
  
  return result; //результат - продукт переработки котлет
 }
}

class Dog implements BeafEater{
 public int eatBeaf(int weight){ 
  //тут описываем съедение
  
  return result; //результат - продукт переработки котлет
 }
}


Все, теперь бабуля будет рада она будет рассматривать животных как пожирателей котлет, а не как кота или собаку.

class GrandMa{
 public void feedBeafEater(BeafEater BeafEater){
   int weightBeaf = 5;
   int shit = beafEater.eatBeaf(weightBeaf ); //кормим поедателя котлет, колучаем какахи
   cleanToilet(shit ); //бабушка убирает какахи
}

}


Все, просто передаешь в бабушке кота или пса и она их кормит

public static void main(String[] args){

 GrandMa grandMa = new GrandMa();
 Cat cat = new Cat();
 Dog dog = new Dog;
 
//напоминаю и кот и пес - рассматриваются бабушкой как пожиратели котлет, ей важно чтобы они поодерживали определенный интерфейс (умели делать определенные вещи)
grandMa.feedBeafEater(cat);
grandMa.feedBeafEater(dog);

}
Ответ написан
@mitekgrishkin
Вижу 2 варианта:
1) наследование
public class A {
   private Object b;

   public Object getB() {
      return b;
   }
}

public class A1 extends A {

}

public class A2 extends A {
}

public int calc(String data, A value, Boolean rez) {
 value.getB();
}


2) Интерфейсы:
public interface I {
   Object getC();
}

public class B implements I {
   private Object c;

   public Object getC() {
      return c;
   }
}

public class D implements I {
   private Object c;

   public Object getC() {
      return c;
   }
}

public int calc(String data, I value, Boolean rez) {
 value.getC();
}
Ответ написан
@belozerow
public int calc(String data, Object value, Boolean rez){
    if(value instanceof MyObject1){
        ((MyObject1)value).doSomething()
    }
}


Но вообще плохой подход, почитайте про ООП
Ответ написан
eugene_leshchinskiy
@eugene_leshchinskiy
а в чем проблема? Передаете, потом через точку обрщаетесь
public static double c(NJTax objNJT, Tax objT){
        return objNJT.calculateTax() + objT.calculateTax();
    }
    public static void main(String[] args) {
        NJTax NJT = new NJTax(65000);
        Tax T = new Tax();
        
        c(NJT, T);
    }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы