美文网首页
Java 抽象类与接口

Java 抽象类与接口

作者: erki_stwee | 来源:发表于2018-05-14 16:15 被阅读16次

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

抽象类

描述

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

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

注意事项
  • 抽象类不能实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。
  • 抽象方法必须由子类进行重写。
  • 只要包含一个抽象方法的抽象类,该类必须定义成抽象类。
  • 抽象类中可以包含具体方法。
  • 子类中的抽象方法不能与父类的抽象方法同名。
  • abstract不能与final(修饰类时表示不能被继承)同时修饰一个类。
  • abstract不能与private、static、final或native并列修饰同一个方法。
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。确切的说只能为public,当然你可以显示的声明为protected、private(编译不通过)
  • 接口中的成员变量会自动变为public static final。
  • 接口中不存在实现的方法。
  • 实现接口的非抽象类必须实现接口中的所有方法。
  • 不能使用new操作符实例化一个接口,可以声明一个接口变量,该变量必须引用(refer to)一个实现该接口的类的对象。可以使用instanceof检查一个对象是否实现了某个特定的接口。
  • 在实现多接口的时候一定要注意方法名重复。
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

抽象类与接口的区别

  • 抽象层次不同:抽象类是对类抽象,而接口是对行为的抽象。
  • 跨域不同:抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间存在一种“is-a”关系。接口则不同,它跟实现类之间是"like-a"关系。
  • 设计层次不同:抽象类时自底向上抽象而来的,接口是自顶向下设计出来的。

相关文章

  • Android-知识点总结

    Java知识点 抽象类与接口的区别: 抽象类可以有方法的具体实现,接口不可以。 由于Java单继承的特性,子类只能...

  • java抽象类与接口的区别是什么?

    关于java抽象类与接口的文章早已是非常多了,本文是对我个人过往学习java的经验,理解及应用抽象类与接口的一个总...

  • 接口和抽象类有什么区别

    学习Java基础知识,打通面试关~十三接口与抽象类面试常客:谈谈你对抽象类和接口的理解 接口用interface修...

  • JAVA

    JAVA java中接口与抽象类的区别? 简述jvm的内存布局? java对象创建的过程? java重载与重写的区...

  • 【第7篇】Kotlin接口的详解

    1、接口 Kotlin 的接口与 Java 8 类似,既包含抽象方法的声明,也包含实现。与抽象类不同的是,接口无法...

  • 技术问 - 抽象类与接口有什么异同

    抽象类与接口的不同 抽象类与接口的相同

  • Java基础-抽象类和接口

    抽象类和接口也是 Java 面试中常考的,下面就来总结一下抽象类和接口的相关知识。 抽象类是类,Java 中类是单...

  • Java基础相关问题网址汇总

    java抽象类和接口联系与区别 http://www.cnblogs.com/azai/archive/2009/...

  • 谈谈 接口与抽象类

    话不多说,直奔主题。先聊一聊 接口与抽象类的区别: 用法不同。接口需要被实现,而抽象类需要被继承。在Java中是单...

  • JAVA中的抽象类和接口

    父类-抽象类:Telephone.java 接口:IPayGame.java 继承了抽象类的子类:CellPhon...

网友评论

      本文标题:Java 抽象类与接口

      本文链接:https://www.haomeiwen.com/subject/tqaqdftx.html