美文网首页
抽象类/接口

抽象类/接口

作者: Ludwigvan | 来源:发表于2017-08-23 09:35 被阅读7次

1、抽象类和接口的区别:

前者是类,后者是接口;

前者的主体可以是没有方法体的方法,由其子类来实现;接口在java8之前只能有接口。

前者跟普通类差不多只是多了一个abstract;如果方法也是abstract 则没有方法主体,由其子类来实现该抽象方法;接口往往有自己的多个实现类。

抽象类的子类通过extends 来继承抽象类实现抽象方法;接口通过implements 来实现接口实现接口中定义的方法;

关于static 的其他用法:

public class Test extends Base{

static{

System.out.println("test static");

}

publicTest(){

System.out.println("test constructor");

}

public static void main(String[] args) {

new Test();

}

}

class Base{

static{

System.out.println("base static");

}

public Base(){

System.out.println("base constructor");

}

}

输出结果:

base static 

test static

base constructor

test constructor

在执行开始,先要寻找到main方法,因为main方法是程序的入口,但是在执行main方法之前,必须先加载Test类,而在加载Test类的时候发现Test类继承自Base类,因此会转去先加载Base类,在加载Base类的时候,发现有static块,便执行了static块。在Base类加载完成之后,便继续加载Test类,然后发现Test类中也有static块,便执行static块。在加载完所需的类之后,便开始执行main方法。在main方法中执行new Test()的时候会先调用父类的构造器,然后再调用自身的构造器。因此,便出现了上面的输出结果。

publicclassTest {

Person person =newPerson("Test");

static{

System.out.println("test static");

}

publicTest() {

System.out.println("test constructor");

}

publicstaticvoidmain(String[] args) {

newMyClass();

}

}

classPerson{

static{

System.out.println("person static");

}

publicPerson(String str) {

System.out.println("person "+str);

}

}

classMyClassextendsTest {

Person person =newPerson("MyClass");

static{

System.out.println("myclass static");

}

publicMyClass() {

System.out.println("myclass constructor");

}

}

我们还是来想一下这段代码的具体执行过程。首先加载Test类,因此会执行Test类中的static块。接着执行new MyClass(),而MyClass类还没有被加载,因此需要加载MyClass类。在加载MyClass类的时候,发现MyClass类继承自Test类,但是由于Test类已经被加载了,所以只需要加载MyClass类,那么就会执行MyClass类的中的static块。在加载完之后,就通过构造器来生成对象。而在生成对象的时候,必须先初始化父类的成员变量,因此会执行Test中的Person person = new Person(),而Person类还没有被加载过,因此会先加载Person类并执行Person类中的static块,接着执行父类的构造器,完成了父类的初始化,然后就来初始化自身了,因此会接着执行MyClass中的Person person = new Person(),最后执行MyClass的构造器。

虽然在main方法中没有任何语句,但是还是会输出,原因上面已经讲述过了。另外,static块可以出现类中的任何地方(只要不是方法内部,记住,任何方法内部都不行),并且执行是按照static块的顺序执行的。

相关文章

  • 5.5-全栈Java笔记:接口的定义和使用

    接口interface 接口的作用 为什么需要接口?接口和抽象类的区别? 接口就是比“抽象类”还“抽象”的“抽象类...

  • 建造者模式

    建造者抽象类或接口 建造者抽象类或接口实现类 产品抽象类或接口 产品抽象类或接口实现类 使用

  • 代理(委托)模式

    主题抽象类或接口 主题抽象类或接口实际类 主题抽象类或接口代理类 使用

  • 访问者模式

    元素抽象类或接口 元素抽象类或接口实现类 访问者抽象类或接口 访问者抽象类或接口实现类 场景使用

  • Java 接口 抽象类 枚举

    接口 使用接口对行为进行抽象 接口: 抽象类 抽象类是用来捕捉子类的通用特性的,包括属性及行为。 抽象类: 抽象类...

  • 抽象类与接口

    抽象类 一般将父类定义为抽象类。语法如下 接口 接口简介 接口是抽象类的延伸,可以将它看作是纯粹的抽象类,接口中的...

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

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

  • 夯实Java基础系列6:一文搞懂抽象类和接口,从基础到面试题,揭

    目录 抽象类介绍为什么要用抽象类一个抽象类小故事一个抽象类小游戏 接口介绍接口与类相似点:接口与类的区别:接口特性...

  • Android面试一问一答:接口与抽象类

    接口与抽象类有什么不同 接口可以多实现;抽象类只能单继承。 接口中只有常量;抽象类可以有自己的成员变量。 抽象类的...

  • 抽象类和接口的区别

    以下两篇文章介绍了接口和抽象类的概念接口概念抽象类概念 抽象类和接口的区别: 抽象类:需要使用abstract关键...

网友评论

      本文标题:抽象类/接口

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