Java面试基础篇之java基础语法之七:抽象类与接口(1),Java入门书籍【附源码】_程序员小虎

抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法

有些同学可能会说了, 普通的类也可以被继承呀, 普通的方法也可以被重写呀, 为啥非得用抽象类和抽象方法呢? 确实如此. 但是使用抽象类相当于多了一重编译器的校验

使用抽象类的场景就如上面的代码, 实际工作不应该由父类完成, 而应由子类完成. 那么此时如果不小心误用成父类了, 使用普通类编译器是不会报错的. 但是父类是抽象类就会在实例化的时候提示错误, 让我们尽早发现问题

很多语法存在的意义都是为了 "预防出错", 例如我们曾经用过的 final 也是类似. 创建的变量用户不去修改, 不就 相当于常量嘛? 但是加上 final 能够在不小心误修改的时候, 让编译器及时提醒我们. 充分利用编译器的校验, 在实际开发中是非常有意义的

2. 接口

======

接口是抽象类的更进一步. 抽象类中还可以包含非抽象方法, 和字段. 而接口中包含的方法都是抽象方法, 字段只能包含 静态常量.

语法规则?

 interface IShape {    void draw();   }   class Cycle implements IShape {    @Override    public void draw() {    System.out.println("○");    }   }   public class Test {    public static void main(String[] args) {    IShape shape = new Rect();    shape.draw();    }   }  

使用 interface 定义一个接口

接口中的方法一定是抽象方法, 因此可以省略 abstract

接口中的方法一定是 public, 因此可以省略 public

Cycle 使用 implements 继承接口. 此时表达的含义不再是 "扩展", 而是 "实现"

在调用的时候同样可以创建一个接口的引用, 对应到一个子类的实例

接口不能单独被实例化

扩展(extends) vs 实现(implements) 扩展指的是当前已经有一定的功能了, 进一步扩充功能. 实现指的是当前啥都没有, 需要从头构造出来

接口中只能包含抽象方法. 对于字段来说 , 接口中只能包含静态常量(final static)?

 interface IShape {    void draw();    public static final int num = 10;   } 

其中的 public, static, final 的关键字都可以省略. 省略后的 num 仍然表示 public 的静态常量

提示:

1. 我们创建接口的时候, 接口的命名一般以大写字母 I 开头.

2. 接口的命名一般使用 "形容词" 词性的单词.

3. 阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性

实现多个接口

有的时候我们需要让一个类同时继承自多个父类. 这件事情在有些编程语言通过 多继承 的方式来实现的. 然而 Java 中只支持单继承, 一个类只能 extends 一个父类. 但是可以同时实现多个接口, 也能达到多继承类似的效果. 现在我们通过类来表示一组动物?

 class Animal {    protected String name;    public Animal(String name) {    this.name = name;    }   }  

另外我们再提供一组接口, 分别表示 "会飞的", "会跑的", "会游泳的

 interface IFlying {    void fly();   }   interface IRunning {    void run();   }   interface ISwimming {    void swim();   }  

接下来我们创建几个具体的动物

猫, 是会跑的

 class Cat extends Animal implements IRunning {    public Cat(String name) {    super(name);    }    @Override    public void run() {    System.out.println(this.name + "正在用四条腿跑");    }   }  

鱼, 是会游的

 class Fish extends Animal implements ISwimming {    public Fish(String name) {    super(name);    }    @Override    public void swim() {    System.out.println(this.name + "正在用尾巴游泳");    }   }  

蛙, 既能跑, 又能游(两栖动物)

 class Frog extends Animal implements IRunning, ISwimming {    public Frog(String name) {    super(name);    }    @Override    public void run() {    System.out.println(this.name + "正在往前跳");    }    @Override    public void swim() {    System.out.println(this.name + "正在蹬腿游泳");    }   }  

还有一种神奇的动物, 水陆空三栖, 叫做 "鸭子"

 class Duck extends Animal implements IRunning, ISwimming, IFlying {    public Duck(String name) {    super(name);    }    @Override    public void fly() {    System.out.println(this.name + "正在用翅膀飞");    }    @Override    public void run() {    System.out.println(this.name + "正在用两条腿跑");    }    @Override    public void swim() {    System.out.println(this.name + "正在漂在水上");    }   }  

上面的代码展示了 Java 面向对象编程中最常见的用法:

一个类继承一个父类, 同时实现多种接口.

继承表达的含义是 is – a 语义, 而接口表达的含义是 具有 xxx 特性

这样设计有什么好处呢? 时刻牢记多态的好处, 让程序猿忘记类型. 有了接口之后, 类的使用者就不必关注具体类型, 而 只关注某个类是否具备某种能力

接口间的继承

接口可以继承一个接口, 达到复用的效果. 使用 extends 关键字?

 interface IRunning {    void run();   }   interface ISwimming {    void swim();   }   // 两栖的动物, 既能跑, 也能游  interface IAmphibious extends IRunning, ISwimming {   }   class Frog implements IAmphibious {    ...   }  

Clonable 接口和深拷贝

Java 中内置了一些很有用的接口, Clonable 就是其中之一

Object 类中存在一个 clone 方法, 调用这个方法可以创建一个对象的 "拷贝"

但是要想合法调用 clone 方法, 必须要先 实现 Clonable 接口, 否则就会抛出 CloneNotSupportedException 异常

  class Animal implements Cloneable {   # 总结  其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。  这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来  **[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](https://ali1024.coding.net/public/P7/Java/git)**  **目录:**  ![](https://s2.51cto.com/images/20210920/1632122070681270.jpg)  **部分内容截图:**  ![](https://s2.51cto.com/images/20210920/1632122071217531.jpg)  ![](https://s2.51cto.com/images/20210920/1632122071289801.jpg)

本站由小牛团队全力维护,小牛十年了,大家已经步入中年 。本站源码全部经过团队成员测试并调试,价格可能比其它网站略贵几元钱,不解释!
小牛资源 » Java面试基础篇之java基础语法之七:抽象类与接口(1),Java入门书籍【附源码】_程序员小虎

发表评论

全站资源亲测可用,价格略高几元,不解释

立即查看 了解详情