抽象类和接口

一.抽象类
抽象类:包含抽象方法的类,我们把它叫做抽象类
1.用关键字abstract进行修饰
2.在抽象类中可以有普通类的所有属性
3.和普通的类 不一样的地方就是 包含了抽象方法
4.和普通的类 不一样的地方就是 他不能够被实例化
5.抽象类的主要作用就是用来被继承的
6.抽象类是用来被继承的 不能被final所修饰
7.抽象方法也不能是私有的 或者是 static的
8.只要有一个类继承了这个抽象类 那么必须要重写抽像类的方法
9.如果这个类不想重写抽象类里面的抽象方法 那么此时这个类也可以设置为抽象类
代码举例:

abstract class Picture{
    public int a;
    public void func() {
        System.out.println("func()");
    }
    public abstract void Draw();//抽象方法:没有具体实现的方法

}

abstract class B extends Picture {

}
/*class C extends B{
    //这里必须要重写
}*/

class A extends Picture {
    @Override
    public void Draw() {

    }
}
class Tree extends Picture {
    @Override
    public void Draw() {
        System.out.println("这是一棵树!");
    }
}
class Stone extends Picture {
    @Override
    public void Draw() {
        System.out.println("这是一块石头!");
    }
}
class Flowers extends Picture {
    @Override
    public void Draw() {
        System.out.println("这是一朵花!");
    }
}
public class TestDemo {
    public static void drawMap(Picture picture) {
        picture.Draw();
    }
    public static void main(String[] args) {
        Picture picture1 = new Tree();
        Picture picture2 = new Stone();
        Picture picture3 = new Flowers();

        drawMap(picture1);
        drawMap(picture2);
        drawMap(picture3);
    }
}

在这里插入图片描述

二.接口
1.interface 关键字修饰
2.里面的数据成员必须是一个常量
3.里面的成员方法默认为:public abstract
4.在接口当中 不能定义一个已经实现的方法
5.JDK1.8新特性:接口当中可以有实现的方法 但是这个方法一定是被default修饰的
6.类和接口的关系: 实现一个接口 implements 可以实现多个接口
7. 解决了 Java当中 单继承的问题
8.实现该接口 一定要重写该接口的方法
9.接口仍然不能被实例化
10.实现该接口的重写方法的时候 不能省略public
11.接口是不能被接口实现的
12.接口和接口之间可以通过extends进行联系
13.一个接口可以extends多个接口
代码举例:

interface Picture {
    void draw();
    //public int a = 10;
    //default void func() {}

}

class Tree implements Picture {
    @Override
    public void draw() {
        System.out.println("这是一棵树!");
    }
}

class Flowers implements Picture {
    @Override
    public void draw() {
        System.out.println("这是一朵花!");
    }
}

class Stone implements Picture {
    @Override
    public void draw() {
        System.out.println("这是一块石头!");
    }
}

public class TestDemo {
    public static void drawMap(Picture picture) {
        picture.draw();
    }
    public static void main(String[] args) {
        Picture picture1 = new Tree();
        Picture picture2 = new Stone();
        Picture picture3 = new Flowers();

        drawMap(picture1);
        drawMap(picture2);
        drawMap(picture3);

    }
}

在这里插入图片描述

代码举例:

interface A {
   void func1();
}
interface B extends A{
    void func2();
}
interface C extends B {
    void func3();
}

class AA implements C {
    @Override
    public void func1() {

    }

    @Override
    public void func2() {

    }

    @Override
    public void func3() {

    }
}


class Animal {
    protected String name;
    public Animal(String name) {
        this.name = name;
    }
}

interface IFlying {
    void fly();
}
interface IRunning {
    void run();
}
interface ISwimming {
    void swim();
}

//一个类可以继承一个类 并且同时 实现多个接口
class Cat extends Animal implements IRunning {
    public Cat(String name) {
        super(name);
    }
    @Override
    public void run() {
        System.out.println(this.name + "正在用四条腿跑");
    }
}

class Frog extends Animal implements IRunning, ISwimming {
    public Frog(String name) {
        super(name);
    }
    @Override
    public void run() {
        System.out.println(this.name + "正在往前跳");
    }
    @Override
    public void swim() {
        System.out.println(this.name + "正在蹬腿游泳");
    }
}
class Robot implements IRunning{
    @Override
    public void run() {
        System.out.println("机器人会跑!");
    }
}

public class TestDemo {
    public static void walk(IRunning iRunning) {
        iRunning.run();
    }
    public static void swim(ISwimming iSwimming) {
        iSwimming.swim();
    }
    public static void main(String[] args) {
        Cat cat = new Cat("汤姆");
        walk(cat);
        Frog frog = new Frog("娃娃");
        walk(frog);
        swim(frog);
        Robot robot = new Robot();
        walk(robot);
    }
}

在这里插入图片描述

三.抽象类和接口的区别
1.子类使用:抽象类用extends关键字继承父类
接口用implements关键字实现接口
2.子类限制:一个子类只能继承一个抽象类
一个子类可以实现多个接口
3.关系:一个抽象类可以实现多个接口
接口不能继承抽象类 但是接口可以使用extends关键字继承多个父接口
4.结构组成:抽象类:普通类+抽象方法
接口:抽象方法+全局变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值