写点什么

Java 面试题八:抽象类和接口的区别,移动端开发技术创新

用户头像
Android架构
关注
发布于: 19 小时前

=====


用 abstract 修饰的类叫做抽象类。??


在讲抽象类之前有必要强调一下 abstract 修饰符:


  • abstract 修饰的类为抽象类,此类不能有对象,(无法对此类进行实例化,说白了就是不能 new);

  • abstract 修饰的方法为抽象方法,此方法不能有方法体(就是什么内容不能有);


关于抽象类的使用特点:


  • 抽象类不能有对象,(不能用 new 此关键字来创建抽象类的对象);

  • 有抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法;

  • 抽象类中的抽象方法必须在子类中被重写。


同学们可能会问到:抽象类不能被“new”,抽象方法必须重写,那么定义它们做什么嘞?


答:抽象类生来就注定它是要被继承的,如果没有任何一个类去继承它的话,那么也就失去了它的意义;抽象方法生来就是要被重写的,而且是必须重写。(只要继承了某个抽象类,就必须去重写此抽象类中含有的抽象方法)


话不多说,看代码:


public abstract class AbstractAnimal {


public abstract void eat();


public abstract void sleep();


}


以上代码是定义了一个叫做 AbstractAnimal?的抽象类,其中含有 eat()和 sleep()两个抽象方法。


定义了一个 animal 类之后再定义一个 cat 类:


public class Cat extends AbstractAnimal {


@Override


public void eat() {


LogUtils.e("我是猫,我吃的是猫粮呀");


}


@Override


public void sleep() {


LogUtils.e("我是猫,我比你们人类睡的时间短!");


}


}


此时,我再来写一个 Person 类:


public class Person extends AbstractAnimal {


@Override


public void eat() {


LogUtils.e("我是人,我要吃大鱼大肉!");


}


@Override


public void sleep() {


LogUtils.e("我是人,每天必须睡够 8 个小时!");


}


}


OK,现在类已经写完了。接下来结合以上的代码说一下抽象类的用处:


细心地同学可以看得出,在 cat 和 person 这两个类中都含有了 sleep 和 eat 这两个方法,但是它们的方法体却不一样。重点就在这里,假设不定义 AbstractAnimal?这个抽象类以用来让 cat 和 person 去继承的话,虽然也要在 cat 和 person 中定义 sleep 和 eat 这两个方法,看似代码上没有太多简化。但是这背后却隐藏着一个规范问题:也就是“是不是”的问题。cat 和 person 都“是”AbstractAnimal?,所以就必须继承 AbstractAnimal?里面的方法。相当于提供了一个大的体制。就好比人:人活着就必须要遵守国家的法律,而至于你信仰佛,还要遵守“佛法”,你信仰共产党,你还要遵守党章和党纪。那就是你自己的事情了


2、接口


====


接口就是一个规范和抽象类比较相似。它只管做什么,不管怎么做。通俗的讲,借口就是某个事物对外提供的一些功能的声明,其定义和类比较相似,只不过是通过 interface 关键字来完成


其中重要的几个知识点:


  • 1、接口中的所有属性默认为:public static final ****;

  • 2、接口中的所有方法默认为:public abst


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


ract ****;


  • 3、接口不再像类一样用关键字 extends 去“继承”,而是用 implements 去“实现”,也就是说类和接口的关系叫做实现,(例如:A 类实现了 B 接口,那么成为 A 为 B 接口的实现类。而类与类之间的继承的话,叫做 A 类继承了 B 类,其中 B 类即为 A 类的父类)。实现接口与类的继承比较相似


具体看一下代码:


public interface Sleep {


public static int A = 1;


public static int B = 2;


void isleep(int i);


}


public interface Eat {


void ieat();


}


public interface Study {


void istudy();


}


public class Cat2 implements Sleep,Eat {


@Override


public void ieat() {


}


@Override


public void isleep(int i) {

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Java面试题八:抽象类和接口的区别,移动端开发技术创新