2016-12-24 4 views
-3

Я пытаюсь использовать конструктор с абстрактными классами, я могу использовать значения, определенные в multip class для mul и div abstract method, но я хочу использовать значение, используемое при добавлении конструктора, т.е. 24 и 4, когда абстрактные методы add и sub вызывается в основном. Может кто-нибудь предложить, что я должен сделать для этого.Использование абстракции с конструктором

Заранее спасибо.

package repeatPracticeJava; 

abstract class addition{ 
    addition(){ 
     this.a=24; 
     this.b=4; 

    } 

    int a,b,c; 
    String str; 
    abstract void add(); 
    abstract void sub(); 
    //abstract void mul(); 
    //abstract void div(); 
} 

abstract class multip extends addition{ 
    multip(){ 
     this.a=12; 
     this.b=3; 
    } 

    multip(String str){ 
     this.str="ajay"; 
     this.a=100; 
     this.b=5; 
    } 
    abstract void mul(); 
    abstract void div();  
} 

public class abstractprat extends multip{ 

    @Override 
    void mul() { 
     // TODO Auto-generated method stub 
     c=a*b; 
     System.out.println(c); 
    } 

    @Override 
    void div() { 
     // TODO Auto-generated method stub 
     c=a/b; 
     System.out.println(c); 
    } 

    @Override 
    void add() { 
     // TODO Auto-generated method stub 
     c=a+b; 
     System.out.println(c); 
    } 

    @Override 
    void sub() { 
     // TODO Auto-generated method stub 
     c=a-b; 
     System.out.println(c); 
    } 

    public static void main(String[] args){ 

     abstractprat obj = new abstractprat(); 

     obj.mul(); 
     obj.div(); 
     obj.add(); 
     obj.sub(); 
    } 

} 

ответ

0

Вы не можете использовать значение в абстрактном том классе, потому как конструктор MULTIP класса перезаписи значения переменных а и Ь в нем. В иерархии конструктора четко указано, что сначала вызывается конструктор самого верхнего класса, а затем второй самый верхний класс называется ex: если C extends B расширяет A, тогда конструктор класса A будет вызываться сначала, а затем конструктор класса B а затем класса C. Следовательно, в вашем коде конструктор добавления классов инициализирует их до 24,4, но конструктор класса multip переписывает их в 12,3. Следовательно, значения переменных остаются 12,3, и к ним обращаются во всех методах абстрактного класса. Если вы хотите получить доступ к значениям переменных из добавления класса, то в классе многократно добавляются разные переменные. Надеюсь, это может решить вашу проблему, я отредактировал ваш код, который будет работать в соответствии с вашими требованиями, указанными в вашем ответе:

abstract class addition{ 
    int a,b,c; 
addition(){ 
    this.a=24; 
    this.b=4; 

} 


String str; 
abstract void add(); 
abstract void sub(); 

} 

abstract class multip extends addition{ 

    int a1,b1,c1;  

    multip(){ 
    this.a1=12; 
    this.b1=3; 
} 

multip(String str){ 
    this.str="ajay"; 
    this.a1=100; 
    this.b1=5; 
} 
abstract void mul(); 
abstract void div();  
} 

public class abstractpart extends multip{ 

@Override 
void mul() { 
    // TODO Auto-generated method stub 
    c1=a1*b1; 
    System.out.println(c1); 
} 

@Override 
void div() { 
    // TODO Auto-generated method stub 
    c1=a1/b1; 
    System.out.println(c1); 
} 

@Override 
void add() { 
    // TODO Auto-generated method stub 
    c=a+b; 
    System.out.println(c); 
} 

@Override 
void sub() { 
    // TODO Auto-generated method stub 
    c=a-b; 
    System.out.println(c); 
} 

public static void main(String[] args){ 

    Test2 obj = new Test2(); 

    obj.mul(); 
    obj.div(); 
    obj.add(); 
    obj.sub(); 
} 

} 
Смежные вопросы