[Java] Вассал моего вассала или Наследование
А что, даже прямой потомой наследует private методы и поля родитля?
Переменные и методы объявленные как private не доступны вне класса(в том числе и в подклассах)
Не закрытые конечно, но интересует есть ли синтаксис чтобы в этом случае писать не A.[метод], а что-то типа superofsuper.[метод]?
а теперь можешь сам подумать, почему.
Интересно, почему я не удивлен?
Еще проблема компиляции таких вызовов.
А по существу вопроса есть что?
пример, в виде, кода приведи - тогда будет проще ответить
class Worker
{
Worker(String _name, double _salary)
{
name = _name;
salary = _salary;
}
public String getName
{
return name;
}
public double getSalary
{
return (1 - salaryTax * salary;
}
public void setSalary(double _salary)
{
salary = _salary;
}
private double salaryTax
{
return 0.05;
}
private String name;
private double salary;
}
class Manager extends Worker
{
Manager(String _name, double _salary)
{
super(_name, _salary);
bonus = 0;
}
public double getSalary
{
return super.getSalary + (1 - bonusTax * bonus;
}
public void addBonus(double _bonus)
{
bonus += _bonus;
}
protected double getBonus
{
return bonus;
}
private double bonusTax
{
return 0.07;
}
private double bonus;
}
class Boss extends Manager
{
Boss(String _name, double _salary)
{
super(_name, _salary);
}
public double getSalary
{
return 0; //Worker.getSalary + super.getBonus; <- Только не надо мне писать что это не работает, я просто для наглядности написал.
}
}
Пара примечаний : A, B и C - это теперь Worker, Manager и Boss соответственно.
Чего хочу: чтобы в такой реализации можно было из класса Boss узнать зарплату без бонуса, например чтобы не начислять налог на бонус.
getSalary - неявно используется для обозначения двух разных вещей:
1. Ставки оклада
2. Кол-во денег выплачиваемое сотруднику.
Меня вообще возможность обращения к суперклассу суперкласса интересует.
Вернее IDEA на это ругаться не стала.
А вообще я бы метод перегрузил.
Оставить комментарий
feliks28
Если есть три класса A, B и C, причем C extends B и B extends A, то может ли класс C получить доступ к закрытым переменным и методам класса A?Если может то как? Первоприходящее в голову super.super.метод не работает.