JAVA学习十一:抽象类

Java面向对象——抽象类

 

abstract:抽象的;在实际开发中,当多个类中出现相同的功能时,但是功能的主体不同,这时可以对功能向上进行抽取,但只抽取功能的定义,并不抽取功能的主体,这样的类和方法,都用abstract来修饰。

abstract只能抽象类和方法,不可以抽象变量。

 

抽象的特点:

1、抽象方法一定在抽象类中;

2、抽象方法和抽象类必须被abstract修饰;

3、抽象类不可以被new创建对象,因为调用抽象方法是没有意义的,抽象方法没有函数体;

4、抽象类中的抽象方法想要被使用,必须由子类复写其所有的抽象方法后,才能建立子类对象调用,如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类,无法创建对象。

 

抽象类和一般类没有太大的区别和不同,在对事物的描述中,该如何描述事物,就如何描述事物,只不过该事物出现了一些不确定的东西。

这些不确定的部分,也是该事物的功能,需要明确出来,但是无法定义主体,通过抽象方法来表示。

 

抽象类比一般类多了个抽象函数,就是在类中可以定义抽象方法,抽象类不可以实例化。

 

特殊情况:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。

 

课堂练习:

创建父类:

1.员工和经理同样具备姓名,工号,工资这三个属性,所以抽取出来定义在父类中。

2.员工和经理的工作内容不同,但是同样都是要工作的,所以在父类中定义一个抽象的工作方法,让子类根据自己的工作内容进行复写实现。

3.当类中定义了抽象方法后,抽象方法所在的类也必须是抽象类,所以父类也应该定义为抽象类。

 

abstract class Employee

{

       private String name;             //定义员工姓名;

       private String id;                  //定义员工工号;

       private double pay;               //定义员工工资;

 

//使用构造函数初始化姓名,工号,工资属性。

       Employee(String name,String id,double pay)            

       {

              this.name =name;

              this.id = id;

              this.pay = pay;

       }

      

//抽象出一个工作方法,以便于子类继承后复写适合自己的工作方法;

       public abstract void work();                              

}

 

//创建普通员工类,继承Employee的所有属性及方法。

class ProEmployee extends Employee                              

{

       ProEmployee(String name,String id,double pay) //使用构造构函数初始化ProEmployee;

       {

//调用父类的属性初始化方法,对普通员工类的属性进行初始化。

              super(name,id,pay);             

       }

 

//复写了适合普通员工的工作方法,覆盖了父类的抽象工作方法;

       public void work()                                                 

       {

              System.out.println("普通员工");

       }

}

 

class Mauager extends Employee          //创建经理类,继承Emplyee的所有属性及方法;

{

       private double bounes;

 

//在构造函数初始化时,增加了经理类的特有奖金属性。

       Mauager(String name,String id,double pay,double bounes)    

       {

//调用父类的属性初始化方法,对经理类的属性进行初始化

              super(name,id,pay);                                                              

              this.bounes = bounes;

       }

 

//复写了适合经理的工作方法,覆盖了父类的抽象工作方法。

       public void work()                                                                      

       {

              System.out.println("经理");

       }

}

 

class employeeDemo

{

       public static void main(String[] args)

       {

//创建普通员工对像;

              ProEmployee p = new ProEmployee("张小三","技术01",9000.00);  

            

//创建经理对像;

              Mauager m = new Mauager("王小五","管理01",15000.00,5000.00);        

 

              p.work();         //调用普通员工的工作方法;

              m.work();         //调用经理的管理方法;

       }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值