Java 抽象与接口相似中带点差异与区别

文章类别 in java

java继承的前提下,抽象和接口就有了!

Java抽象:

为什么要用到抽象呢?

这是由于很多具体类它们有它们各自的方法体现,而父类完全没有必要去写出方法的具体实现,反正子类都想各干各自的事情,那么父类只要把方法声明出来,定义成抽象,让子类自己去实现功能就好了! 抽象的作用就是建立一个宏观的结构,具体实现层只要实现算法和逻辑!

抽象以abstract为关键字修饰。

Java抽象的优点:

在抽象类中,可以在里面定义一些方法的实现!这样,当子类继承了这个抽象类,那么抽象类所实现的方法在子类也可以用!

代码体现:

//抽象类,注意:有抽象方法就一定有抽象类,但是有抽象类不一定要有抽象方法!

public abstract class AbsPerson {

        public abstract void eat();

        public void sleep()
        {
            System.out.println("闭着眼睛睡觉觉");
        }

}


//实现类
public class Student extends AbsPerson {

    @Override
    public void eat() {
        System.out.println("吃肉!");
    }

}

//测试类
public class MainDemo {

    public static void main(String[] args) {
        Student s = new Student();
        s.eat();
        s.sleep();
    }

}

//输出结果:
    //吃肉!
    //闭着眼睛睡觉觉

Java接口

从以上代码就可以看出,抽象类的好处可以在自己里面定义一些功能! 但是,抽象类也有不好的地方,那就是单继承,当一个子类继承了这个抽象类,那么它就不能继承别的类了,这个时候,接口就出现了,它就是功能的扩展,因为java是可以实行多实现的,这也就弥补了抽象类的不足,定义接口让子类实现,使得子类拥有更多更多的类型了!

不过接口也有它的缺点,那就是接口不能在里面定义方法的实现!只能定义抽象的方法!

接口以interface为关键字进行修饰

可以不可以将Java抽象和Java接口的优点结合起来呢?

既然抽象类中可以对具体方法的实现,那么不妨在抽象类中实现接口,并且实现接口中的抽象方法,那么子类再在继承这个抽象类并且实现接口的时候,就可以有选择的实现不实现接口中的方法!

由代码来体现下:

//接口
public interface StudyCode {

    public void study();

}

//抽象类
public abstract class Person implements StudyCode {

    //重写接口中的抽象类并实现
    @Override
    public void study() {
        System.out.println("good good study");
    }
    //定义一个抽象方法
    public abstract void eat();

}

//子类
public class Student extends Person implements StudyCode{

    @Override
    public void eat() {
        System.out.println("吃嘛嘛香");
    }

	//这里没有实现接口中的方法!
}

//测试类
public class MainDemo {

    public static void main(String[] args) {
        Student s = new Student();
        s.eat();
        s.study();
    }


}

输出结果:

吃嘛嘛香
good good study

而当子类要实现接口中的方法只需要重写父类中的重写接口的方法即可:

public class Student extends Person implements StudyCode{

    @Override
    public void eat() {
        System.out.println("吃嘛嘛香");
    }

    @Override
    public void study() {
        // TODO Auto-generated method stub
        System.out.println("study what");
    }

}

我的相关文章

相关资料