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

Java的接口与抽象类

作者: Levi_moon | 来源:发表于2021-02-28 17:02 被阅读0次

一、接口

接口:用来描述类应该做什么,而不指定它们应该怎么做。一个类可以实现一个或多个接口,当有些要求符合一些接口时,就可以使用实现了这个接口的类。

接口的特点:

  • Java中,接口不是类,而是对希望符合这个接口的类的一组需求
  • 接口中的所有方法都是public方法,因此,在接口中声明方法时,可以省略public修饰符
  • 接口中的字段都是public static final
  • 不能用new实例化一个接口,但是可以声明一个接口
  • 可以用继承的方式扩展接口
  • 一个类可以同时实现多个接口,多个接口间通过逗号分隔

二、抽象类

抽象类:在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类的特点:

  • 抽象类是不能被实例化的,但是它的其他功能和普通类类似,变量、方法等使用方式与普通类一样;
  • 也正是因为抽象类不能被实例化,所以,抽象类只能被继承使用。

废话少说,上代码:

  1. 首先看抽象类的代码,包括一个构造器、两个变量(公有及私有)、一个抽象方法、一个私有方法及两个公有方法。
/**
 * 抽象类(父类)
 */
public abstract class TestAbstract {
    //构造器
    public TestAbstract(){
        System.out.println("TestAbstract()");
    }

    //公有及私有变量
    String testStr1="testStr1";
    private String testStr2="testStr2";

    //抽象方法
    public abstract void testFun1();

    //私有方法
    private void testFun2(){
        System.out.println("testFun2()");
    }

    //获取私有变量
    public void testFun3(){
        System.out.println("testStr2:"+testStr2);
    }

    //调用私有方法
    public void testFun4(){
        testFun2();
    }
}
  1. 再来看子类的代码,包括一个构造器、一个重写父类的方法、一个main方法。
/**
 * 子类(继承抽象类)
 */
class TestAbstractSon extends TestAbstract{
    //构造器
    public TestAbstractSon(){
        System.out.println("TestAbstractSon()");
    }

    //重写父类的方法体
    @Override
    public void testFun1() {
        System.out.println("testFun1()");
    }

    //main方法
    public static void main(String[] args) {
        TestAbstractSon testAbstractSon=new TestAbstractSon();
        System.out.println("testStr1: "+testAbstractSon.testStr1);
//        System.out.println(testAbstractSon.testStr2);//父类的私有变量不能直接使用
        testAbstractSon.testFun1();
//        testAbstractSon.testFun2();//父类的私有方法不能直接使用
        testAbstractSon.testFun3();
        testAbstractSon.testFun4();
    }
}
  1. 结果展示如下,由结果可以看出,在实例化对象之前,子类会先去调用父类的构造器,然后再调用本类的构造器。
TestAbstract()//在实例化之前,先调用父类构造器
TestAbstractSon()//在实例化时,调用本类的构造器
testStr1: testStr1
testFun1()
testStr2:testStr2
testFun2()

抽象类虽然不能被实例化,但是它还是有构造器的,那么它为什么还会有构造器呢?这是因为子类只能访问自己的成员,而不能访问父类中的成员。只有父类的构造器才有权限来对自己的成员进行初始化。因此,必须让所有的构造器都得到调用,否则就不能正确构造出完整对象。

值得注意的是,如果一个子类继承了抽象类,那么子类就必须实现父类中所有的抽象方法,如果不这样做,那么子类也是抽象类,编译器会强制我们用abstract关键字来修饰这个类。


三、抽象类和接口的区别

  1. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的;
  2. 抽象类中的方法可以有方法体,但是接口中的方法不能有方法体;
  3. 接口中不能含有静态代码块以及静态方法(JDK 1.8 以后,接口里可以有静态方法和方法体),而抽象类中可以有静态代码块和静态方法;
  4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

相关文章

  • Android-知识点总结

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

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

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

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

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

  • JAVA

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

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

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

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

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

  • Java基础-抽象类和接口

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

  • Kotlin---接口与继承

    接口与抽象类的区别 同样在Kotlin中也有接口的概念,与Java不同的是,Kotlin中的接口可以定义变量,但是...

  • Kotlin:接口能包含属性和方法实现了

    一、接口定义 Kotlin的接口与Java 8类似,即包含抽象方法的声明,也包含实现; 与抽象类不同的是,接口无法...

  • 谈谈 接口与抽象类

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

网友评论

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

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