给Java初学者的学习笔记

第9章 抽象类和接口

2019-04-04  本文已影响275人  yangsg

1. 抽象类

父类中可以定义出一种行为,但无法描述这个行为的细节。具体的细节可以由各个子类去描述,这个时候父类的这个行为只需要给出定义,不需要进行描述。
体现在编程中,父类给出方法定义,子类去实现方法内部编码细节。
这种情况这个类可以理解为是一个抽象类,这种没有细节的方法被称为叫抽象方法
抽象的关键字: abstract,它可以修饰方法
抽象类的定义

public abstract class AbstractTest {
    public abstract void haha(); //haha方法给出定义,无需实现细节
    public void xixi() {
        System.out.println("嘻嘻");
    }
}

抽象类中不一定有抽象方法
抽象类中允许出现普通方法
如果抽象方法要在类中定义,这个类一定是抽象类
抽象类不能直接创建对象

我们创建抽象类的目的就是为了作为父类使用
抽象父类:Bird

public abstract class Bird {    
    private String color;   
    public Bird(String color) {
        this.color = color;
    }
    public void sleep() {
        System.out.println("鸟类睡觉都是闭眼睛");
    }
    public abstract void eat(); 
}

实际子类:FlyBird

public class FlyBird extends Bird {
    public FlyBird(String color) {
        super(color);
    }
    @Override
    public void eat() {
        System.out.println("随便吃");  
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        FlyBird fb = new FlyBird("");
        fb.eat();
        
        Bird b = new FlyBird("");
        b.eat();
    }
}

子类在继承了抽象父类后,必须对抽象方法进行实现。除非子类也是抽象类。

2. 接口

接口主要用于描述现实世界中拥有同种行为的事物。比如飞机,鸟,UFO...可能都会飞,但是是完全不同的类。
可以将接口理解为是一种特殊抽象类(没有属性只有抽象方法),实际上接口在官方文档的定义中不是类。
接口的特征:

接口一般命名为XXXXable,XXXX一般是一个动词,able在英文中表示“可能性”。XXXXable可以翻译为“有XXXX这个动作的可能性”
接口的声明

public interface Flyable {
    public abstract void fly();
}

接口的继承,SwimAndFlyAble继承了 Swimable和Flyable接口中的方法,同时自己拓展了drink和run方法

public interface SwimAndFlyAble extends Swimable, Flyable {
    public void drink();
    public void run();
}

类实现接口

public class SuperBird implements SwimAndFlyAble {

    @Override
    public void swim() {}
    @Override
    public void fly() {}
    @Override
    public void drink() {}
    @Override
    public void run() {}
}

类既继承父类又实现接口,eat方法从bird中继承来的,fly方法从接口中实现来的

public class FlyBird extends Bird implements Flyable{
    @Override
    public void eat() {
        System.out.println("随便吃");
    }
    @Override
    public void fly() {
        System.out.println("随便飞");  
    }
}

接口也可以作为上溯造型的多态使用,Swimable s表示可以在水上游泳的事物。SwimBird实现了Swimable 接口,Ship也实现了这个接口

public class Test2 {
    
    public static void test(Swimable s) {
        s.swim();
    }
    public static void main(String[] args) {
        SwimBird s = new SwimBird("");
        Ship p = new Ship();
        
        test(s);
        test(p);
    }
}

总结:接口与类之间的关系,接口与接口之间的关系,类与类之间的关系

接口
单继承 多实现
接口 X 多继承

笔试面试题: 接口与抽象类的区别?

上一篇 下一篇

猜你喜欢

热点阅读