抽象类

描述狗,行为:吼叫
描述狼,行为:吼叫
发现他们之间有共性,可以进行向上抽取。
当然是抽取它们的所属共性类型,犬科
犬科这类食物,都具备吼叫行为,但是具体的功能,是有具体的子类来确定的
这时在描述犬科时,发现了有些功能不具体,这些不具体的功能,需要在类中标识出来,通过Java中的关键字abstract(抽象)
定义了抽象函数的类必须被abstract关键字修饰,被abstract关键字修饰的类是抽象类。

抽象类,在描述事物时,没有足够的信息描述一个事物,这时该事物就是抽象事物

抽象类的特点

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

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

细节问题

1,抽象类一定是个父类?
是的,因为不断抽取而来的。

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

3,抽象类是否可以不定义抽象方法?
是可以的,有什么意义呢 ?仅仅是不让该类创建对象。

4,抽象关键字abstract不可以和哪些关键字共存?
1,final
2,private
3,static

 abstract class 犬科 //extends Object
 {
     abstract void 吼叫();//抽象函数,需要abstract修饰,加分号;结束
 }

 // 代码体现
 class Dog extends 犬科
 {
     void 吼叫()
     {
         System.out.println("wangwang");
     }
 }
class Wolf extends 犬科
{
    void 吼叫()
    {
        System.out.println("aoao");
    }
}
class AbstractDemo
{
    public static void main(String[] args)
    {
        System.out.println("..");
    }
}

practice

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

在问题领域中先寻找其中涉及的对象。
程序员
属性:name id salary
行为:work

项目经理:
属性:name id salary bonus
行为:work

这些对象是否有关系?因为发现了他们之间的共性,应该存在着关系。
可以将他们的共性向上抽取到共性类型,员工。
员工:
属性:name id salary
行为:work
发现员工的工作内容本身就不具体,应该是抽象的,由具体的子类来实现。

abstract  class Employee
{
    private String name;
    private String id;
    private double salary;
    /* 
    构造一个员工对象,一初始化就具备这三个属性。
    */
    public Employee(String name,String id,double salary)
    {
        this.name=name;
        this.id=id;
        this.salary=salary;
    }
    public abstract void work();
}
// 具体的子类,程序员。
class Programmer extends Employee
{
    Programmer(String name,String id,double salary)
    {
        super(name,id,salary);
    }
    public void work()
    {
        System.out.println("code ....");
    }
}

//经理
class Manager extends Employee
{

    private double bonus;
    Programmer(String name,String id,double salary,double bonus)
    {
        super(name,id,salary);
        this.bonus=bonus;
    }
    public void work()
    {
        System.out.println("manage....");
    }

}
class AbstractTest
{
    public static void main(String[] args)
    {
        System.out.println("..");
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值