抽象类总结

本文思路:


一、概念

在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,则必须定义为抽象类。

二、抽象类的特点:

A:抽象类和抽象方法必须用abstract关键字修饰。

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

C:抽象类不能实例化。因为它不是具体的。

      但是抽象类有构造方法,不能实例化,那么构造方法的作用是什么呢?

      用于子类访问父类数据的初始化。

D:抽象的子类

      如果不想重写父类的抽象方法,该子类是一个抽象类;

      重写所有的抽象方法,这个时候子类是一个具体的类。

抽象类的实例化其实是靠具体的子类实现的,是多态的体现。

三、抽象类的成员特点:

(1)成员变量

      既可以是变量,也可以是常量。

(2)构造方法

       有,用于子类访问父类数据的初始化。

(3)成员方法

       既可以是抽象的,也可以是具体的。

四、抽象类的成员访问特点:

     A:抽象方法:强制要求子类做的事情。

      B:非抽象方法:子类继承的事情,提供代码的复用性。

abstract class Animals {
    public int num=10;
    public final int num2=200;

    public Animals(){}
    public Animals(String name,int age){}

    public abstract void show();

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

class Dogs extends Animals {
    public void show(){
        System.out.println("Show Dog");
    }
}

public class Chouxiang {
    public static void main(String args[]) {
        //创建对象
        Animals a = new Dogs();
        a.num=100;
        System.out.println(a.num);
        System.out.println(a.num2);
        System.out.println("---------------");
        a.show();//show Dog
        a.method();//method
    }
}
五、案例:员工案例:

     * 分析:
     *  普通员工类
     *      成员变量:姓名、工号、以及工资
     *      成员方法:工作
     *  经理类:
     *      成员变量:姓名、工号、以及工资,奖金属性
     *      成员方法:工作
     * 实现:
     *  员工类:
     *  普通员工类:
     *  经理类:
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);
    }

    public void work(){
        System.out.println("按照需求写代码");
    }

}

//经理类
class Manager extends Employee {
    //奖金
    private int bonus;

    public Manager(){}

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

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

    public int getBonus(){
        return bonus;
    }

    public void setBonus(int bonus){
        this.bonus=bonus;
    }
}

public class AbstractTest4 {

    public static void main(String[] args) {
        //测试普通员工
        Employee emp = new Programmer();
        emp.setName("林青霞");
        emp.setId("00001");
        emp.setSalary(80000);
        System.out.println(emp.getName()+"---"+emp.getId()+"---"+emp.getSalary());
        emp.work();
        System.out.println("--------------");
        emp=new Programmer("林青霞","00001",8000);
        System.out.println(emp.getName()+"---"+emp.getId()+"---"+emp.getSalary());
        emp.work();
        System.out.println("--------");

        //测试经理类
        //由于子类有特有的内容,所以我们用子类来测试
        Manager m = new Manager();
        m.setName("刘意");
        m.setId("00002");
        m.setSalary(9000);
        m.setBonus(2000);
        System.out.println(m.getName()+"----"+m.getId()+"---"+m.getSalary()+"---"+m.getBonus());
        m.work();

        //通过构造方法赋值
        m=new Manager("刘意","00002",9000,2000);
        System.out.println(m.getName()+"----"+m.getId()+"---"+m.getSalary()+"---"+m.getBonus());
        m.work();
    }

}
这里注意经理类中有自己独有的属性,此时则不能采用多态。

五、抽象类中注意的两个小问题

1、一个类如果没有抽象方法,可以可以定义为抽象类?有什么意义?

      可以;不让创建对象。

2、abstract关键字不能和哪些关键字共存?

      Private 冲突

      final 冲突

      Static 无意义

六、总结

本文主要总结的是关于抽象类的一些知识,抽象方法是没有方法体的,有抽象方法的类一定是抽象类,抽象类的特点以及抽象类中的成员访问特点是重点知识,要掌握,此外,抽象类的实例化时靠多态实现的,但是当子类中有自己新的成员变量或者方法时,要实例化子类,调用子类自身的变量和方法。


 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值