Java中的抽象类

抽象类的概念:

                在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

抽象类的特点:

抽象类必须用abstract关键系修饰。

抽象类中不一定有抽象方法,但有抽象方法的类必须定义为抽象方法,(有抽象方法的类一定是抽象类)。

抽象类不能实例化,即无法构造对象(Animal a = new Animal();

示例:



abstract class Employee{
    private String name;
    private String id;
    private int salary;

    public Employee(){}

    public Employee(String name, String id, int salary) {
        this.name = name;
        this.id = id;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    public abstract void work();


}

class Programmer extends Employee{

    public Programmer(){}

    public Programmer (String name,String id , int salary){
        super(name, id, salary);
    }

    @Override
    public void work() {
        System.out.println("码代码");
    }
}

class Manager extends Employee{

    private int Money;        //bonus 奖金

    public int getMoney() {
        return Money;
    }

    public void setMoney(int money) {
        Money = money;
    }

    public Manager(){}

    public Manager (String name,String id , int salary){
        super(name, id, salary);
        this.Money=Money;
    }

    @Override
    public void work() {
        System.out.println("跟客户谈需求");
    }

}

public class chouxiang_test   {
    public static void main(String[] args) {
        Employee emp = new Programmer();
        emp.setId("123");
        emp.setName("狗蛋儿");
        emp.setSalary(123123);
        System.out.println(emp.getName()+"--"+emp.getId()+"--"+emp.getSalary());
        System.out.println("------------------------------------");
        Employee emp2 = new Manager();
        emp2.setId("13");
        emp2.setName("狗儿");
        emp2.setSalary(12323);
        ((Manager) emp2).setMoney(798789);

        System.out.println(emp2.getName()+"--"+emp2.getId()+"--"+emp2.getSalary()+"--"+((Manager) emp2).getMoney());
    }
}

抽象类不能和private,final,static组合,

错误示例:



abstract  class  Fu{
    private abstract void show(){

    }
}

public class chouxiang_test   {
    public static void main(String[] args) {

    }
}

报错信息:

错误示例二:
 


abstract  class  Fu{
    final  abstract void show(){

    }
}

public class chouxiang_test   {
    public static void main(String[] args) {

    }
}

报错信息:

示例三:

因为抽象是没有方法体的,而static是可以直接通过类名访问的,但是,访问一个没有方法体的方法,没有任何意义,所以不能组合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值