Java抽象类与接口

抽象类和接口都是顶层设计,在项目早期就需要确定

抽象类

无法具体描述事物的类

抽象方法:专门用于继承的子类来重写的方法,没有方法体

抽象类:抽象方法所存在的类

抽象类不一定只含有抽象方法,也可以有有实现的方法

抽象方法只能存在于接口或抽象类

抽象类的使命是用于被继承

抽象类的子类必须重写实现父类的抽象方法

如果未实现所有抽象方法的子类必须也声明抽象类

具体声明为abstract的类:

abstract class GrandFather {
    protected abstract void university();
    protected abstract void work();//定义了两个抽象方法,在子类中这些必须实现
}

abstract class Father extends GrandFather{
    @Override
    protected void work(){
        System.out.println("有工作了");//实现了一个但还要实现university的抽象方法
    }
}

class Son extends Father{
    @Override
    protected void university(){
        System.out.println("上大学了");//这里全部实现
    }
}

public class Main {
    public static void main(String[] args) {
        Son son = new Son();
        son.work();
        son.university();
    }
}

/*
打印结果为:
有工作了
上大学了
*/

接口

接口没有构造函数

只有常量抽象方法的定义,没有方法的实现(Java8之前,Java8之后接口内可以有default修饰的有实现的方法体)

interface关键字声明的“类”

接口无法被new即实例化

  • 接口中的变量声明默认以staticfinal修饰,即常量

  • 接口中的方法默认使用abstract修饰,即抽象方法

接口着重于行为规范,可以应用于有对应行为的事物

接口可以多继承(一个对象可以继承多个接口)

public class Main {
    public static void main(String[] args) {
        Person person = new Person();
        person.fly();
        person.run();
    }
}
interface IRun {
    String location = "地方";
    void run();
}

interface IFly {
    String location = "地方";
    void fly();
}

class Person implements IFly, IRun{

    @Override
    public void run() {
        System.out.println("我会跑");
    }

    @Override
    public void fly() {
        System.out.println("我会飞");
    }
}

/*
打印结果为:
我会飞
我会跑
*/

同时,访问接口方法的方法还能将对象赋值给接口,由接口变量来调用方法,如:

public class FlyDemo {
    public static void main(String[] args) {
        IFly iFly0 = new Bird();//这里IFly是个接口
        iFly0.fly();
        IFly iFly1 = new AirPlane();
        iFly1.fly();
    }
}

/*
打印结果为:
鸟在飞
飞机在飞
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值