Java 抽象类与接口

2018-05-14  本文已影响16人  erki_stwee

接口和内部类未我们提供了一种将接口与实现分离的更加结构化的方法

抽象类

描述

面向对象的领域一切都是对象,通过具体的类来描述,但不是所有类都是来描述对象的。如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这个类我们称其为抽象类。

抽象类一定是用来继承的,同时在一个以抽象类为节点的继承关系等级链中,叶子节点一定是具体的实现类。

注意事项
public abstract class Animal {
    public abstract void shout();
}

public class Cat extends Animal {
    @Override
    public void shout() {
        System.out.println("cat : miaomiaomiao");
    }
}

public class Dog extends Animal {
    @Override
    public void shout() {
        System.out.println("dog : wangwangwang");
    }
}

public class Test {

    public static void main(String [] args){
        Animal a = new Cat();
        Cat cat = new Cat();
        Dog dog = new Dog();

        a.shout();
        cat.shout();
        dog.shout();

    }

}
输出结果:
cat : miaomiaomiao
cat : miaomiaomiao
dog : wangwangwang

接口

描述

接口可以描述为抽象类的抽象。接口本身并不是类。通过使用implements关键字实现某个接口,接口实现了多继承的功能。

注意事项
public interface Animal {

    int a = 10;
    public static final int b = 10;

    public void eat();

    void shout();

    public void test(Animal a);
}

public class Cat implements Animal {

    @Override
    public void eat() {
        System.out.println("cat : i like bone");
    }

    @Override
    public void shout() {
        System.out.println("cat : wangwangwang");
    }

    public void test(Animal a){
        String str = "";
        if(a instanceof Cat) {
            str = "cat";
        }
        System.out.println(str);
    }
}

public class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("dog : i like fish");
    }

    @Override
    public void shout() {
        System.out.println("dog : wangwangwang");
    }

    public void test(Animal a){
        String str = "";
        if(a instanceof Dog) {
            str = "dog";
        }
        System.out.println(str);
    }
}

public class Test {

    public static void main(String [] args){
        Animal a = new Cat();
        Cat cat = new Cat();
        Dog dog = new Dog();

        a.shout();
        cat.shout();
        dog.shout();

        a.eat();
        cat.eat();
        dog.eat();

        cat.test(a);
        cat.test(cat);
        cat.test(dog);

        dog.test(a);
        dog.test(cat);
        dog.test(dog);

    }

}
输出结果
cat : wangwangwang
cat : wangwangwang
dog : wangwangwang
cat : i like bone
cat : i like bone
dog : i like fish
cat
cat



dog

抽象类与接口的区别

上一篇 下一篇

猜你喜欢

热点阅读