抽象类

抽象:笼统,模糊,看不懂,不具体。

特点:

1.方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰。抽象方法必须定义在抽象类中,该类必须也被abstract修饰。

2.抽象类不可以被实例化。为什么?因为调用抽象方法没意义。

3.抽象类必须有其子类覆盖了所有的抽象方法后,该子类才可以实例化。否则,这个子类还是抽象类。

抽象类的细节:

1.抽象类有构造函数,用于给子类对象初始化。

2.抽象类可以不定义抽象方法,但很少见,目的就是不让该类创建对象,AWT的适配器对象中就是这种类。

通常,这个类中的方法有方法体,但是没有内容。

3.抽象关键字不可以和一些关键字共存:

private:私有的方法子类是无法继承到的,也不存在覆盖,而abstract和private一起使用修饰方法,abstract既要子类去实现这个方法,而private修饰子类根本无法得到父类这个方法。互相矛盾。

static:  抽象方法不能和static关键字共存,因为一旦加static我们就可以通过类名直接访问抽象方法,由于抽象方法没有方法体,没有任何意义,也不允许这样做

final:抽象类不能和final共存,因为抽象类自身无法创建对象,我们需要通过子类创建对象,一旦抽象类使用final关键字,那么抽象类就没有子类

4.抽象类和一般类的异同点:

相同点,抽象类和一般类都是用来描述事物的,都在内部定了成员。

不同:1.一般类有足够的信息描述事物;抽象类描述事物的信息有可能不足。

           2.一般类中不能定义抽象方法,只能定义非抽象方法; 抽象类中可以定义抽象方法,同时也可以定义非抽象方法。

           3.一般类可以实例化;抽象类不可以实例化。

5.抽象类一定是父类。因为需要子类覆盖方法后才可以对子类实例化。

例子:

package com.monfolld;
//描述雇员
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;
    }
    abstract /*抽象*/void work();       //因为子类不同类型的的工作未知,所以对工作抽象化
}
//描述程序员
class Programmer extends Employee{
    Programmer(String name,String id,double pay){
        super(name, id, pay);                     //父类进行初始化
    }
    void work(){                                  //子类进行具体描述
        System.out.println("程序员工作");
    }
}
//描述经理   多了一个属性
class Manager extends Employee{
    private int bonus;
    Manager(String name,String id,double pay){
        super(name, id, pay);                   //父类进行初始化
        this.bonus=bonus;
    }
    void work(){
        System.out.println("程序经理工作");        //子类进行具体描述
    }
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值