抽象类的练习

package lianxi4;

public abstract class Employee {
  private String name;
  private int number;
  private MyDate birthday;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getNumber() {
    return number;
}
public void setNumber(int number) {
    this.number = number;
}
public MyDate getBirthday() {
    return birthday;
}
public void setBirthday(MyDate birthday) {
    this.birthday = birthday;
}
public Employee(String name, int number, MyDate birthday) {
    super();
    this.name = name;
    this.number = number;
    this.birthday = birthday;
}
public abstract double earnings();
@Override
public String toString() {
    return "birthday=" + birthday.toDateString() + ", name=" + name + ", number="
            + number + "]";
}

}
package lianxi4;

public class MyDate {
   private int month;
   private int day;
   private int year;
public MyDate(int month, int day, int year) {
    super();
    this.month = month;
    this.day = day;
    this.year = year;
}

public int getMonth() {
    return month;
}

public void setMonth(int month) {
    this.month = month;
}

public int getDay() {
    return day;
}

public void setDay(int day) {
    this.day = day;
}

public int getYear() {
    return year;
}

public void setYear(int year) {
    this.year = year;
}

public String toDateString(){
    return this.year+"年"+this.month+"月"+this.day+"日";
}
}
package lianxi4;

public class SalariedEmployee extends Employee{
private double monthlySalary;
public SalariedEmployee(String name, int number, MyDate birthday,double monthlySalary){
    super(name,number,birthday);
    this.monthlySalary = monthlySalary;
}
@Override
public double earnings() {
    return monthlySalary;
}
@Override
public String toString() {
    return "SalariedEmployee ["+super.toString()+"monthlySalary=" + monthlySalary + "]";
}

}
package lianxi4;

import java.util.Scanner;

public class PayrollSystem {

    public static void main(String[] args) {
        Employee []emps = new Employee[2];  //注意,虽然Employee是抽象类,但是是定义数组,不是实例化
        emps[0] = new SalariedEmployee("小明",1001,new MyDate(5,3,1990),4000);//体现多态性
        emps[1] = new HourlyEmployee("小红",1002,new MyDate(4,12,1993),20,8);

        Scanner s = new Scanner(System.in);
        System.out.println("请输入当前月份");
        int month = s.nextInt();
        for(int i=0;i< emps.length;i++){
            System.out.println(emps[i]);
            if(month==emps[i].getBirthday().getMonth()){
                System.out.println("增加"+emps[i].getName()+"工资100元");

            }
        }

    }

}

结果:

请输入当前月份

4

SalariedEmployee [birthday=1990年5月3日, name=小明, number=1001]monthlySalary=4000.0]

HourlyEmployee [birthday=1993年4月12日, name=小红, number=1002]hour=8, wage=20.0]

增加小红工资100元

时间: 2024-11-03 20:54:46

抽象类的练习的相关文章

抽象类及抽象类

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 如形状类是抽象的类,圆.三角形等是具体类.用abstract修饰的类就是抽象类. 如果某个类中包含有抽象方法,那么该类就必须定义成抽象类.但是抽象类中不一定有抽象方法. 如果子类继承抽象类,那么必须在子类中实现抽象类中的抽象方法. 使用关键字abstract定义抽象类,一般语法: [访问权限]                 abstract                   class 类名            {

抽象类与接口的区别

抽象类的定义: 成员属性:可以是变量,也可以是常量 成员方法:可以抽象,也可以非抽象(比如:构造方法是一定会有的) 接口类的定义: 成员属性:只能是常量(public static final) 成员方法:只能是抽象(接口没有构造方法,像太监没有小JJ) 多态的区别: 类与类: 继承,单一继承(亲爹只有一个) 类与接口: 实现,单一.多重实现(可以认多个干爹) 接口与接口: 继承,单一.多重继承(可以认多个干爹) 设计理念区别: 抽象类被继承体现的是:"is a"的关系.抽象类中定义的

PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

  前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象类与抽象方法 1.什么是抽象方法?              没有方法体 {} 的方法,必须使用abstract 关键字修饰.这样的方,我们叫做抽象方法.                    abstract function say(); //    抽象方法 2.什么是抽象类?        

c#抽象类

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 抽象类 { public abstract class information//定义抽象 { public string Code { get;set;} public string Name { get; set; } public abstract void Showinfo(); } public

静态、抽象类、加载类、魔术方法等

静态  static关键字 普通成员普通成员是属于对象的 静态成员静态成员是属于类的 普通方法里面可以调用静态成员静态方法里面不能调用普通成员self关键字 在类里面代表该类 普通类 class Ren { public $name="张三"; public static $zhongzu; //静态成员 普通方法 function Say() { echo self::$zhongzu."你好"; } 静态类 static function Run() { ech

接口中包含抽象类demo

package jiechoudemo; /* * 接口中包含抽象类 */ public class jiechoudemo { public static void main(String[] args) { windows.door wd = new zhuozi().new yizi(); wd.close(); } } //写一个接口 interface windows{ public abstract void open(); //抽象类 abstract class door{ pu

一个接口能否继承另一个接口?一个抽象类能否实现一个接口?

都可以: 一.一个接口能否继承另一个接口? 接口继承接口  本质就是一个抽象类继承另一个抽象类(它们都没写方法的实例).当一个类继承了一个抽象类,它必须要重写父类 抽象类中的抽象方法,如果不去重写父类抽象方法的实例,那么这个类也是抽象类(这个抽象子类,直到重写这个抽象方法的实例为止, 才能摆脱抽象的命运).其实我们想想,一个类去实现一个接口也不就是一个实体子类把一个抽象的所以抽象方法实例化(重写了 抽象父类 中全部抽象方法),当然抽象类和接口还是有区别的.我上上篇就写到了抽象类和接口的区别,有兴

第14章 抽象类和接口

抽象类:类的设计应该确保父类包含它的子类的共同特征.有时候,一个父类设计的非常抽象,以至于它都没有任何具体的实例.这样的类称为抽象类.类名前使用abstract 抽象方法:父类中的方法,因为父类为抽象,无法根据具体的实例进行实现,因此,这样的方法属于抽象方法.方法头使用abstract UML中抽象类和抽象方法的名字用斜体表示: 抽象类不能使用new创建实例.抽象方法只有定义而没有实现.它的实现由子类提供.一个包含抽象方法的类必须声明为抽象类. 抽象类的构造方法定义为protected,因为它只

java抽象类的使用

/*当多个类中出现相同功能,但是功能主体不同,这是可以进行向上抽取.这时,只抽取功能定义,而不抽取功能主体. 抽象:看不懂. 抽象类的特点:1,抽象方法一定在抽象类中.2,抽象方法和抽象类都必须被abstract关键字修饰.3,抽象类不可以用new创建对象.因为调用抽象方法没意义.4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用.    如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类. 抽象类和一般类没有太大的不同.该如何描述事物,就如何描述事物,只不过

JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展

JAVA之旅(七)--final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展 OK,我们继续学习JAVA,美滋滋的 一.final 我们来聊聊final这个关键字 final可以修饰类,方法和变量 final修饰的类不可以被继承 final修饰的方法不可以被覆盖 final修饰的变量是一个常量,只能被赋值一次 内部类只能访问被final修饰的局部变量 final,故名思意,就是最终的意思,由以上的五种特性,不过final的出现,也是有