我的java学习日记(四)

java抽象类(abstrace)和接口(interface)

抽象方法

抽象方法定义了一个通用的标准,约定起子类根据自身特性重写(@Override)这些方法。

抽象方法的表达方法:

[权限修饰符] abstract 返回数据类型 抽象方法名();

注意这里抽象方法的关键词在权限修饰符和返回数据类型之间。

抽象的方法可以不用实现,说人话就是你这个方法定义了一个返回数据类型,但是你要是说你这个方法是抽象的方法,那你就不用特意的去应付一个返回的数据,因为你已经说了这是一个抽象的方法,编译器看见了也不会多bb。

如果你创建了一个包含抽象方法的类,那么你就必须说这个类是个抽象类

抽象类的定义方法

声明抽象类的表达方式:

//其中权限修饰符和abstract的位置可以相互调换

[权限修饰符] abstract class 抽象类名{}

抽象类的特点

1.抽象类必须被继承

2.抽象类中可以有抽象方法也可以有非抽象方法

3.抽象类不能被实例化,既不能使用new运算符创建对象,只有他的非抽象子类能够new一个对象。

例如:

Pet p=new Pet();//error 因为抽象类不能被实例化
Pet p=new Cat();//success 因为它可以指向子类对象

4.抽象的子类必须重写所有父类的抽象方法,否则这个子类还是一个抽象类(很有道理的废话

案例分析

有了前面的知识作为铺垫,接下来让我们来分析一下本案例的实现。

首先分析定义类的需求:

开发人员的静态属性为姓名 工号 薪水 工作

项目经理包括的静态属性为姓名 工号 薪水 奖金 工作

地区经理的包括的静态行为为姓名 工号 薪水 奖金 股票分红 工作

三者可以抽取出来的共性内容是姓名 工号 薪水 工作

其中 他们的工作各不相同,所以 将工作定义为抽象类 ,子类再重写即可

package jiekou;

abstract public class Employee {
    private String name;
    private int id;
    private double salary;
    Employee(String name, int id, double salary)
    {
        this.name = name;
        this.id = id;
        this.salary = salary;
    }
    public String getName()
    {
        return name;
    }

    public int getId() {
        return id;
    }
    public double getSalary()
    {
        return salary;
    }
    abstract public void work();

    public static void main(String[] args) {
        Manager jack;
        jack=new Manager("jack",123456,9999.9);
        jack.work();
        Programmer jeff;
        jeff=new Programmer("jeff",123457,19999.9);
        jeff.work();
    }
}


Manager.java

package jiekou;

public class Manager extends Employee
{
    public Manager(String name, int id,double salary)
    {
        super(name, id,salary);
    }
    public void work()
    {
        System.out.println("i am a Manager");
        System.out.println(getName()+getId()+getSalary());
    }
}
 

Progermmer.java

package jiekou;

public class Programmer extends Employee{
    public Programmer(String name,int id,double salary)
    {
        super(name,id,salary);
    }
    @Override
    public void work()
    {
        System.out.println("this is a programmer,i am working!");
        System.out.println("programmer"+getName()+" id:"+getId()+" who has "+getSalary()+"$ per month");

    }
}

AeraManager.java

package jiekou;

public class AeraManager extends Employee
{
    public AeraManager(String name,int id,double salary)
    {
        super(name,id,salary);
    }
    public void work()
    {
        System.out.println("i am a AreaManager");
        System.out.println(getId()+getName()+getSalary());
    }
}

运行结果:

/Users/Admin/Library/Java/JavaVirtualMachines/openjdk-15.0.2/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=57248:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/Admin/IdeaProjects/study/out/production/study jiekou.Employee
i am a Manager
jack1234569999.9
this is a programmer,i am working!
programmerjeff id:123457 who has 19999.9$ per month

进程已结束,退出代码为 0

总结

通过以上案例,熟悉了抽象接口的使用,并了解了抽象接口应在何时使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值