2015-10-14 2 views
-2

Мне нужно наследовать метод экземпляра из суперкласса, но я застрял.Метод Наследование и вызов

public class Pay 

private float hours; 
private float rate; 
private int hrsStr; 
float gross; 
double tax; 

public void calc_Payroll() 
{ 
    if (hrsStr != 0) 
     gross = hrsStr + ((hours - hrsStr) * 1.33f) * rate; 
    else 
     gross = hours * rate; 
} 

public void tax(double a) 
    { 
    if (gross <= 399.99) 
       tax = .92; 
       else 
        if (gross <= 899.99) 
         tax = .88; 
        else 
         tax = .84; 
    } 

это часть класса супер, мне нужно иметь тот же метод подписи (???) был также вызывать налог (двойной а) и calc_payroll()

это то, что я имел для подкласса, но он не работал.

public class Payroll extends Pay 
{ 
float net; 
void calc_payroll() 
    {    
    float finaltax = (float) tax; 
    net = gross * finaltax; 

    } 

} 
+0

@Override необязательно требуется, но рекомендуется. Реальная проблема заключается в том, что у вас нет такой же доступности или орфографии метода, который вы пытаетесь переопределить. (* public *, * calc_Payroll * с капиталом * P *) – DoubleDouble

+0

@JawadLeWywadi, метод не будет отменен, если подпись будет одинаковой; аннотация @Override не является магическим исправлением. Тем не менее, это хорошая практика. Проблема заключается в том, что метод подкласса A) не такой же случайный, как суперкласс, а B) уменьшает видимость супер-метода до уровня пакета. Он должен быть объявлен как «public void calc_Payroll» – Tgsmith61591

+1

Это были просто ребята, но спасибо. –

ответ

2

Ваш void calc_payroll() в вашем подклассе не переопределяет и не вызывает метод суперкласса.

Если вы хотите переопределить метод в базовом классе, сигнатура метода должна быть одинаковой. Для пояснения используйте аннотацию @override.

Если новый метод имеет другую подпись, то вы можете вызвать метод суперкласса, используя ....

void calc_payroll() 
{ 
    super.calc_Payroll(...); 
} 

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

+0

Что я пытаюсь сделать, так это использовать calc_payroll для расчета чистой оплаты в подклассе. SO Я хочу, чтобы он вызывал метод налога и метод calc_payroll для расчета и возврата чистой оплаты – Kiotzu

+1

. Какова цель аргументов float a, float b, int c, float d? Они, кажется, не используются, – MikeJ

+0

Я просто понял, что мне не нужны эти аргументы, поскольку они из частных переменных экземпляра. – Kiotzu

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