抽象类与接口

来源:互联网 发布:mysql loadfile 锁 编辑:程序博客网 时间:2024/06/14 20:54

抽象类的关键字:abstract
类定义前面如果再加上一个abstract,就代表该类为抽象类。抽象类里面只包含一些最基本的最通用的成员。
抽象类里面可以有抽象方法,但没有抽象方法的话也可以将它定义成抽象类,从而防止它被实例化。对于抽象类的使用可以看以下代码:

class Demo{    public static void main(String[] args){        Teacher teacher = new Teacher();        teacher.SetName("张三");        teacher.show();        Student stu = new Student();        stu.SetName("小明");        stu.show();    }}/** *定义一个抽象类 */abstract class People {    String name;    void SetName(String name){        this.name = name;    }    abstract void show();//抽象方法}/** *继承抽象类 */class Teacher extends People{    void show() {       //抽象方法必须被实例化        System.out.println("我是Teacher类,我的名字是:"+name);    }}/** *继承抽象类 */class Student extends People{    void show(){        //抽象方法必须被实例化        System.out.println("我是Student类,我的名字是:"+name);    }}运行结果:我是Teacher类,我的名字是:张三我是Student类,我的名字是:小明

抽象类是不能够被实例化的,必须要有子类来继承它,实现里面的抽象方法,然后使用子类的实例。
不过也可以定义一个抽象类的变量,让它指向子类的实例。如下:

        People people = new Teacher();        people.SetName("李四");        people.show();        运行结果:        我是Teacher类,我的名字是:李四

这样也是多态性的一种体现。
注意:抽象方法不能使静态的,因为静态方法在类加载的时候会存在。
抽象类的构造方法不能为抽象的,因为实例化子类的时候会先执行父类的构造方法的。

定义接口的关键字:interface
实现接口的关键字:implements
接口可以看成一种特殊的抽象类,它比抽象类更加抽象。它里面的方法都必须是抽象方法,里面的所有成员变量都必须是常量,也就是public static final的。
接口可以看成是一种规定,它规定了一个类必须做什么,而不会规定它怎么做。我们还是看一下的代码:

public class MyInterface {    public static void main(String[] args) {        Refrigerator ref= new Refrigerator();        ref.model();        ref.size();    }}/** * 定义一个家电的接口 */    interface Appliance{                void model();//定义家电型号的抽象方法    }    interface Display{        void size();//定义大小的抽象方法    }    class Refrigerator implements Appliance,Display{        /**         * 必须将抽象的方法实现         */        public void model() {            System.out.println("这就是我的型号");          }        public void size() {            System.out.println("这就是我的大小");        }    }输出结果:这就是我的型号这就是我的大小

接口可以看成是常量和若干接口方法的组合,从上面的程序可以看出,一个类是可以实现多个接口的,这和类的单继承性是不同的。
接口和抽象类的区别
1、从某种角度上看,接口也是一种特殊的抽象类,它们都包含有抽象方法,但抽象类可以为部分方法提供实现,而接口里面的所有方法都是抽象的,因此我们如果需要为部分方法提供实现的话就可以使用接口。
2、一个类只能继承一个父类(包括抽象类),但可以实现多个接口,这个是接口的优势之一。

0 0
原创粉丝点击