JAVA--抽象类接口

抽象类

抽象类规则

1、抽象类只需要在class前 添加 abstract-----public abstract class Haha {}

2 、抽象类不能new对象

3 、抽象类有构造函数 【抽象类能被其他类所继承 子类的构造函数第一句代码 super() 】

4 、抽象类可以有 成员变量 静态变量 普通函数 抽象函数 。并且抽象类也能被其他类继承 也能继承其他类。

5 、抽象函数就是在函数的返回值前面添加 abstract------public abstract void eat();

6 、抽象函数不写,也不能写函数体

7 、抽象函数必须在抽象类中 抽象类中不一定有抽象函数

8 、抽象函数子类必须重写

问题:抽象类中有构造器,但是抽象类不可以被创建对象,已经抽象类了既然不能new对象那为啥还要有个构造器?

抽象类是干嘛使得,当然是用于继承了虽然抽象类不可以创建对象,但是父类中可以有成员变量、那么构造器就可以重载使用这一成员变量,当子类继承父类的时候就可以在子类的构造器中通过使用super(成员变量)进行父类的调用,进而使用到父类的构造方法。不写的话就会调用默认的空参构造器super()。

子类为什么会掉用父类的构造器,是因为子类继承父类,会继承到父类中的数据,所以必须要看父类是如何对自己的数据进行初始化的。所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程。

接口类

规则:

1、接口没有构造器,不可以new接口,new直接报红

2、实现接口后要重写其中所有的方法,不写直接报红

3、不想实现接口的所有方法,可以将自己的实现类声明为abstract类

4、可以定义成员变量,属于final static类型,类实现接口,可直接使用

解决的问题:

为了解决Java中类和类之间原本的的单继承问题,于是使用关键字(implements)将子类和父类的关系由继承变成了实现。两者本身性质没有没有太大的区别,但是接口可以被多实现,从而会时组合更加的灵活,并且程序之间的耦合度很低。

比如有猫、狗、鸡三个类,猫有两个方法:1、上树(爬);2、抓老鼠

狗有一个方法:1、抓老鼠

鸡有一个方法:1、上树(飞)

此时可以看出,猫的方法和鸡、狗的都有交集,将两个方法抽取放在的两个类中,如果是继承的话,狗可以继承含有抓老鼠的类的那个方法,鸡可以继承含有上树的那个方法,猫怎么继承?JAVA不允许继承两个类,并使用里面的方法。这时候使用接口就可以完成继承不能完成的工作。

使用的方式:

将原本只作为继承的类换为接口,只需要将class换为interface--比方原本是 public class Animal{}的一个类转化为接口就是public interface Animal{}就换了一个单词。在接口中我们只需要进行函数的声明,他具体的功能交由实现的类去完成,理解就是:在Animal中声明了一个eat();函数狗实现了接口,就可以将吃的功能具体为--狗吃骨头,羊实现接口就可以将吃的功能具体为--羊吃草。普通的类实现某个接口要重写接口中的所有功能函数,因为接口默认是abstract类的,里面定义的方法也是抽象方法,所以不想实现所有的方法就要再自己的类上加个abstract。其中可以定义属性不过是final、Static类型的叫全局常量比较合适,只要实现了就可以直接使用那个常量。

你可能感兴趣的:(java,开发语言)