Как унаследовать класс в java
Разберем на примере:
public class Program{
public static void main(String[] args) {
Person tom = new Person("Tom");
tom.display();
Employee sam = new Employee("Sam");
sam.display();
}
}
class Person {
String name;
public String getName(){ return name; }
public Person(String name){
this.name=name;
}
public void display(){
System.out.println("Name: " + name);
}
}
class Employee extends Person{
public Employee(String name){
super(name); // если базовый класс определяет конструктор
// то производный класс должен его вызвать
}
}
Чтобы объявить один класс наследником от другого, надо использовать после имени класса-наследника ключевое слово extends, после которого идет имя базового класса. Для класса Employee базовым является Person, и поэтому класс Employee наследует все те же поля и методы, которые есть в классе Person.
Если в базовом классе определены конструкторы, то в конструкторе производного классы необходимо вызвать один из конструкторов базового класса с помощью ключевого слова super. Например, класс Person имеет конструктор, который принимает один параметр. Поэтому в классе Employee в конструкторе нужно вызвать конструктор класса Person. То есть вызов super(name) будет представлять вызов конструктора класса Person.
При вызове конструктора после слова super в скобках идет перечисление передаваемых аргументов. При этом вызов конструктора базового класса должен идти в самом начале в конструкторе производного класса. Таким образом, установка имени сотрудника делегируется конструктору базового класса.
Производный класс имеет доступ ко всем методам и полям базового класса (даже если базовый класс находится в другом пакете) кроме тех, которые определены с модификатором private. При этом производный класс также может добавлять свои поля и методы:
public class Program{
public static void main(String[] args) {
Employee sam = new Employee("Sam", "Microsoft");
sam.display(); // Sam
sam.work(); // Sam works in Microsoft
}
}
class Person {
String name;
public String getName(){ return name; }
public Person(String name){
this.name=name;
}
public void display(){
System.out.println("Name: " + name);
}
}
class Employee extends Person{
String company;
public Employee(String name, String company) {
super(name);
this.company=company;
}
public void work(){
System.out.printf("%s works in %s \n", getName(), company);
}
}