太自由

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
【14-10】面向对象-抽象类的产生
/*
描述狗,行为,吼叫。
描述狼,行为,吼叫。
发现他们之间有共性,可以进行向上抽取。
当然是抽取他们的所属共性类型,犬科。
犬科这类事物,都具备吼叫行为,但是具体怎么叫,是不确定的,是由具体子类来明确的。
这时在描述犬科时,发现了有些功能不具体,这些不具体的功能,需要在类中标识出来,通过Java关键字abstract(抽象).


定义了抽象函数的类也必须被abstract关键字修饰,被abstract关键字修饰的类是抽象类
*/


/*
抽象类的特点。
1,抽象类和抽象方法都需要被abstract修饰。
抽象方法一定要定义在抽象类中。
2,抽象类不可以创建实例,原因,调用抽象方法没有意义。
3,只有覆盖了抽象类中所有的抽象方法后,其子类才可以实例化。
否则该子类还是一个抽象类。

之所以继承,更多是在于思想,是面对共性类型操作会更简单。
*/


/*
细节问题:
1,抽象类是父类吗?
    是的,因为是不断抽取而来的。

2,抽象类是否有构造函数呢?
    有,虽然不能给自己的对象初始化,但是可以给自己的子类对象初始化。
    抽象类和一般类的异同点:
        相同:
        1,它们都是用来描述事物,
        2,它们之中都可以定义属性和行为。

        不同:
        1,一般类可以具体的描述事物。
           抽象类描述事物的信息不具体。
        2,抽象类中可以多定义一个成员,抽象函数。
        3,一般类可以创建对象,抽象类不能创建对象。

3,抽象类中是否可以不定义抽象方法。
     是可以的,那这个抽象类存在到底有什么意义呢?仅仅是不让该类创建对象。

4,抽象关键字abstract不可以和哪些关键字共存?
    1,final (被final修饰的类不能有子类,而抽象类的定义就是为了子类继承它)
    2,private(子类要继承抽象类的全部方法才可以创建对象,一旦被private了 子类就不知道了)
    3,static (有了静态修饰的方法后,就可以被类名直接调用,而调用抽象类的抽象方法是没有用的)
*/

abstract class Q
{
    public abstract void houjiao();
}

class Dog extends Q
{
    public void houjiao()
    {
        System.out.println("汪汪汪汪");
    }
}

class Wolf extends Q
{
    public void houjiao()
    {
        System.out.println("嗷嗷嗷嗷");
    }
}

class Test 
{
    public static void main(String[] args) 
    {
        Wolf wolf = new Wolf();
        wolf.houjiao();
    }
}


【14-11】面向对象-抽象类的练习

    *
需求:公司中程序员有姓名,工号,薪水,工作内容。
项目经理除了有姓名,工号,薪水,工作内容,还有奖金。
对给出需求进行数据建模。

在问题领域中先找寻其中的对象。
程序员:
    属性:姓名,工号,薪水
    行为:工作

项目经理:
    属性:姓名,工号,薪水,奖金
    行为:工作

经过分析发现:程序员和经理都属于员工
    员工:
        属性:姓名,工号,薪水
        行为:工作
但是员工的工作本身具有不具体性,应该是抽象,由具体的子类来体现

*/

abstract class Employee
{
    private String name;
    private String id;
    private double pay;

    public Employee(String name,String id,double pay)
    {
        this.name = name;
        this.id = id;
        this.pay = pay;
    }

    public abstract void work();

}

//程序员
class Programmer extends Employee
{
    public Programmer(String name,String id,double pay)
    {
        super(name,id,pay);
    }

    public void work()
    {
        System.out.println("code...");
    }
}

//项目经理
class Manager extends Employee
{
    private double bouns;
    public Manager(String name,String id,double pay,double bouns)
    {
        super(name,id,pay);
        this.bouns = bouns;
    }

    public void work()
    {
        System.out.println("manage");
    }
}

class AbstractTest
{
    public static void main(String[] agrs)
    {
        System.out.println("");
    }
}

 

posted on 2016-02-23 09:05  太自由  阅读(215)  评论(0编辑  收藏  举报