Abstract Classes in java

  • Could you have omitted the abstract method altogether from the Person superclass, simply defining the getDescription methods in the Employee and Student subclasses?
  • If you want did that, then you wouldn’t have been able to invoke the getDescription method on the variable p.
  • The compiler ensures that you invoke only methods that are declared in the class.

absractClasses/PersonTest.java

package abstractClasses;

public class PersonTest {
    public static void main(String[] args)
    {
        Person[] people = new Person[2];

        // fill the people array with Student and Employee objects
        people[0] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
        people[1] = new Student("Maria Morris", "computer science");

        // print out names and descriptions of all Person objects
        for(Person p : people)
            System.out.println(p.getName() + ", " + p.getDescription());
    }
}

abstractClasses/Employee.java

// Enables transform audio video link to to html5 embed audio video tags.
package abstractClasses;

public abstract class Person 
{
    public abstract String getDescription();

    private String name;

    public Person(String n) 
    {
        name = n;
    }

    public String getName() 
    {
        return name;
    }
}

abstractClasses/Employee.java

// Enables transform audio video link to to html5 embed audio video tags.
package abstractClasses;

import java.util.Date;
import java.util.GregorianCalendar;

public class Employee extends Person{
    private double salary;
    private Date hireDay;

    public Employee(String n,double s,int year,int month,int day)
    {
        super(n);
        salary = s;
        GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
        hireDay = calendar.getTime();
    }

    public double getSalary()
    {
        return salary;
    }

    public Date getHireDay()
    {
        return hireDay;
    }

    public String getDescription()
    {
        return String.format("an employee with a salary of $%.2f", salary);
    }

    public void raiseSalary(double byPercent)
    {
        double raise = salary * byPercent / 100;
        salary += raise;
    }
}

abstractClasses/Student.java

package abstractClasses;

public class Student extends Person{
    private String major;

    /**
     * @param n the student's name
     * @param m the student's major
     */
    public Student(String n,String m)
    {
        // pass n to superclass constructor
        super(n);
        major = m;
    }

    public String getDescription()
    {
        return "a student majoring in " + major;
    }
}

Abstract methods are an important concept in the Java programming language.
You will encounter them most commonly inside interfaces.

Todo:The use of extends and super is explained separately.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值