(26)抽象类引入、特点、和一般类区别、抽象继承练习

一、抽象引入

父类:student

            void study(){ }//无论写啥,都会被覆盖,所以不写函数主体,但是这样写的话,这个函数,相对于student是多余的

子类:BaseStudent

           void study(){

                        System.out.println("基础学习");

                         }

子类:AdvStudent

           void study(){

                        System.out.println("就业学习");

                         }

当多个类中出现多个相同功能,但是功能主体不同,这是可以进行向上抽取。这时,只抽取功能定义,而不抽取功能主体。

abstract class student{

                          abstract   void study();

                          void sleep()//对于共性的东西,直接抽取就好,没必要定义成抽象的方法

                           {

                                    System.out.println("躺着睡!!")

                           }


                                   }

 class BaseStudent  extends student{

           void study(){

                        System.out.println("基础学习");

                         }

                              }

二、抽象类特点

1.抽象方法一定定义在抽象类中

2.抽象方法和抽象类必须被abstract关键字修饰

3.抽象类不可以用new创建对象,因为调用抽象方法没有意义

4.抽象类中的方法要被使用,必须由子类复写其所有的抽象方法后,建立子类对象调用

   如果子类只是覆盖了部分的抽象方法,那么该子类还是个抽象类

对4理解:抽象类功能的实现是通过继承实现的,其所有方法都会继承过来,若不进行复写,就会有抽象方法,而抽象方法只能在抽象类中,所以不完全复写,还是个抽象类,不能建立对象

三、抽象类和一般类区别与联系

     没有太大不同,该如何描述事物就如何描述,只不过,该事物出现了一些看不懂的东西。

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

     抽象类比一般类多了抽象函数,抽象类不可以实例化

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

五、练习

假设我们在开发一个系统时,徐亚对员工建模,员工包含三个属性:姓名,工号,工资

经理也是员工,除了含有员工的属性外,另外还有一个奖金属性。请使用继承的思想设计出员工类和经理类要求类中提供必要的方法进行属性访问

分析:

①这里的员工和经理不是继承关系。如果经理继承员工,若员工中有个做什么工作的方法,那么经理继承员工,这个方法也继承过来了,相当于经理也要做员工的活,这是不符合常理的。

②一个公司,有不同部门,要做的工作类型不确定,所以这个工作的方法是不确定,要定义成抽象类型,然后普通员工和经理继承这个抽象员工类,实现抽象方法。




员工抽象类:
public 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();

	
}
经理继承抽象员工类
public class Manage extends Employee {
    private int bonus;
    @Override
    public void work() {
        System.out.println("经理做管理的事情!!");

    }
    public Manage(String name,String id,double pay,int bonus){
        super(name,id,pay);
        this.bonus=bonus;
    }

}
普通员工继承抽象员工类
public class Generalworker extends Employee {

	@Override
	public void work() {
		// TODO Auto-generated method stub
       System.out.println("普通员工做些简单的事情");
	}
	public Generalworker(String name,String id,double pay){
             super(name,id,pay);
	}
	 
}





































posted @ 2017-07-07 19:46  测试开发分享站  阅读(123)  评论(0)    收藏  举报