java基础(一) 抽象类和接口

首先介绍一下概念:

       抽象类:用abstract修饰的类

            但是毕竟还是一个类,有正常的成员变量和方法。

            有抽象方法的类一定是抽象类,但是抽象类中可以没有抽象方法。(此时和正常的类没有区别)

       接口:在我看来就是一个Interface,你可以看出来,它不是一个类。所以没有构造方法这一说。


然后比较一下接口和抽象类的相同点和不同点

    相同点:

            1.都能被继承:

                  but实现接口的类必须实现接口中所有的抽象方法

                  而继承抽象类的子类,可以选择性的继承自己喜欢的抽象方法,这里可能有的人会说,当我继承了

                  一个抽象类之后,系统自动提示我要重写父类中所有的抽象方法,甚至于当我没有重写所有方法时

                  会报错。出现这种情况的原因是,你的子类是一个正常的类,你换成抽象类之后,一个方法不重写

                  也不会报错那没有被重写的方法,怎么办,很简单,儿子不写孙子写。

            2.不能被实例化:

                  接口从根本来讲,都不是一个类,没办法要求它去实例化

                  抽象类呢,抽象类可以说是一个不完全的类,它的方法都是抽象的,就算实例化了也都是不能调用

                  的,可能有人会想,向上造型一下,new一个子类的空间存父类对象,然而它那么多子类,子类还

                  可能有那么多子类,你new所有子类还是具体哪一个?

                  换一句话说,抽象类就像一个抽象出来的类,或者说是你想象中的事物,是没办法真实的出现的。

不同点:

            1.接口是没有构造方法的,而抽象类有。

                  接口不是类,但我们抽象类好歹是个类好么???

                  和正常的类相同,

类继承抽象类时,构造函数不会被覆盖。 而且,在实例化子类对象时首先调用

                 的是抽象类中的构造函数再调用子类中的。在调用父类(抽象类)中的构造函数也可以对父类中的

                  成员变量进行初始化赋值!

           2.接口中的方法必须都是抽象方法,而抽象类中的方法可以包含普通的方法

           3.接口中的方法只能用public修饰,抽象类中的方法可以用publicprotect修饰,这是默认的


既然说到这了就来研究一下抽象类和接口中的成员变量和方法吧

            

接口中的成员变量为静态常量,抽象类中的成员变量没有特别要求我最近碰到了一个选择题,具体如下:


            在JAVA接口中可以定义 
                         A、 静态方法 
                         B、 常量 
                         C、 构造方法 
                         D、 抽象方法 

            

 A.静态方法

                关于接口,接口中的成员变量都是默认静态常量的,也就是默认被static final修饰的。通俗的理解,static修饰的属性是最先加载出来的(static修饰的成员,在类开始加载的时候就加载到了本地方法区,其中的成员可以直接调用),也就是说不需要实例化接口,我们就可以得到这些成员变量(恰好接口是不能被实例化的)。而方法一旦被static方法修饰了,就会变成一个类方法,要知道的是被static修饰的方法是没办法重写的。因为静态部分是最先被加载出来的,而且只加载一次所有不仅仅是接口中的方法不能被static修饰,所有需要重写的方法都是不能被static修饰的

猜你喜欢

转载自blog.csdn.net/cherry_lzy/article/details/79999388