Java基础之抽象类

1.java之抽象类的基本概念

普通类就是完善的功能类,直接生产对象并使用,其中的方法都已经实现完整(带有方法体"{}").抽象类的最大特点包含了抽象方法,抽象方法是只声明(没有方法体)的方法,抽象方法定义时使用abstract关键字完成,并且抽象方法一定要在抽象类中,抽象类要使用abstract关键字声明.

重点:在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类

Demo:

package Study;

public class AbstractClassDemo {
    public static void main(String args[]) {
//        A a =new A();//抽象类不能实例化,构造对象
        B b = new B();
        b.method1();
        //利用抽象类来声明对象
        A a=new B();
        a.method1();
    }
}
//(如果一个类中有abstract抽象方法,那么这个类必须声明为abstract,但abstract(抽象)类里面不一定要有抽象方法)
abstract class A {
    abstract void method1();//抽象方法
}

class B extends A {
    //如果抽象类的子类(B)是一个完整类,那么它必须重写所有的抽象方法(少一个都不行)
    public void method1() {
        System.out.println("我是一个完整的方法");
    }
}

在实际开发中,抽象类使用原则如下.

1.抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;
2.子类(如果不是抽象类)必须覆写抽象中的全部抽象方法;
3.抽象类对象可以使用对象的向上转型,通过子类来进行实例化操作.

Demo需求:程序员有姓名,学号,工资,职位,而项目经理有姓名,学号,工资,职位,奖金,利用抽象类简化声明项目经理类的代码量

[从需求可以知道项目经理只比程序员多奖金这个属性]

package Study;

//需求:程序员有姓名,学号,工资,职位,而项目经理有姓名,学号,工资,职位,奖金,利用抽象类简化声明项目经理类的代码量
public class AbstractDemo {
    public static void main(String args[]) {
        Manager manager = new Manager();
        //子类Manager继承抽象类ITworkers的method 1,2,3,4方法
        manager.method1();
        manager.method2();
        manager.method3();
        manager.method4();
        //Manager自己定义的方法
        manager.award();
    }

}

abstract class ITworkers {
    String name;
    int Id;
    int salary;
    String contents;

    abstract void method1();

    abstract void method2();

    abstract void method3();

    abstract void method4();
}

class Manager extends ITworkers {
    int award = 9000;

    @Override
    void method1() {
        System.out.println(name = "小陈");
    }

    @Override
    void method2() {
        System.out.println(Id = 12);
    }

    @Override
    void method3() {
        System.out.println(salary = 9000);
    }

    @Override
    void method4() {
        System.out.println(contents = "项目经理");
    }

    public void award() {
        System.out.println("奖金" + award);
    }
}

AbstactDemo2

package Study;

/**抽象类abstract
抽象类里面可以包含正确的方法和抽象方法
抽象方法可以包含构造方法,但是不能被实例
----------------------------------------------------
构造方法的作用是让子类对父类里面的数据进行初始化
抽象类的子类还可以是一个抽象类(不用实现抽象方法)
抽象类的子类(正常类)必须实现抽象类中的所有抽象方法
 **/
public class AbstactDemo2 {
    public static void main(String args[]) {
        workers workers = new workers("张三", 2, 5000);
        workers.work();
        workers.singnIn();
        System.out.println(workers.name = " " + workers.Id + " " + workers.salary);
        Programmer programmer = new Programmer("李四", 1, 2000);
        programmer.work();
        programmer.singnIn();
        System.out.println(programmer.name + " " + programmer.Id + " " + programmer.salary);
    }
}

abstract class Employee {
    String name;
    int Id;
    int salary;

    //抽象类使用构造方法,给抽象类属性初始化,,而在属性没有初始化前,类中所有的属性都是对应数据类型的默认值
    public Employee(String name, int id, int salary) {
        this.name = name;
        Id = id;
        this.salary = salary;
    }

    abstract void work();

    public void singnIn() {
        System.out.println(name + "签到");
    }
}

class workers extends Employee {

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

    @Override
    void work() {
        System.out.println("IT开发人员");
    }
}

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

    @Override
    void work() {
        System.out.println("项目经理");
    }
}

抽象类abstract

抽象类里面可以包含正确的方法和抽象方法
抽象方法可以包含构造方法,但是不能被实例

构造方法的作用是让子类对父类里面的数据进行初始化
抽象类的子类还可以是一个抽象类(不用实现抽象方法)
抽象类的子类(正常类)必须实现抽象类中的所有抽象方法
**/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值