关于java:清华学霸用18行代码讲解Java接口程序员果然厉害学到了

25次阅读

共计 6991 个字符,预计需要花费 18 分钟才能阅读完成。

上一篇是分享的是《Java 中 final 关键字的作用和 Java 抽象类》,首先和大家说一声道歉,原本打算这篇文章更新的是《Java 接口和 Java 类与类之间的关系》,然而 Java 接口的知识点略多,五一假期也会进来放松放松,所以明天先更新《Java 接口》,另一个知识点,咱们前面补上,体谅下哈。

接下来开始进行分享:

Java 接口

Java 接口概述

计算机通过这些接口能够连贯不同的外设, 扩大了计算机的性能 , 计算机实现了某个接口, 就具备了连贯这个接口设施的性能, 没有实现该接口就不具备该性能。

计算机中有 USB 插槽, 不论是键盘 / 鼠标 / 硬盘 / 打印机, 只有有 USB 插头就能够连贯到电脑上, 这些设施是不同厂商生产的, 它们都遵循 USB 协定。

Java 程序中的接口是用来扩大类的性能的, 能够把接口了解为性能的封装, Java 中的接口也能够了解为一个操作标准 (协定)。

Java 接口定义与实现

1.Java 接口定义的语法:

[修饰符] interface 接口名 {

接口中的办法默认应用 public abstract 润饰

接口中的字段默认应用 public static final 润饰

接口中能够定义 public static 静态方法

定义 public default 办法

}

2.Java 接口的应用

[修饰符] class 类名 implements 接口 {

须要重写接口的形象办法

package com.wkcto.chapter01.interfaces.demo01;

/**

* 定义航行接口

* 封装航行性能

* @author

*

*/

public interface Flyable {

// 接口中的办法默认应用 public abstract 润饰

void fly();}
package com.wkcto.chapter01.interfaces.demo01;

/**

* 定义鸟类

* 一个类实现了接口, 须要重写接口中形象办法

*

* @author

*

*/

public class Bird implements Flyable {

@Override

public void fly() {System.out.println("小鸟在天空中自在翱翔");

}

}

练习:定义接口封装游泳性能, 鱼会游泳, 小狗会游泳, 人会游泳。

Java 接口多态

package com.wkcto.chapter01.interfaces.demo01;

/**

* 1) 接口是一种援用数据类型, 能够定义变量, 然而接口不能实例化对象, 接口援用能够赋值实现类对象

* 2) 接口多态 , 通过接口援用调用接口中形象办法, 实际上执行的是实现类对象的办法

* 接口存在的意义就是为了实现多态.

*

* @author

*

*/

public class Test {public static void main(String[] args) {//1) 接口定义变量

Flyable flyable ;

//2) 接口不能实例化对象

// flyable = new Flyable(); //Cannot instantiate the type Flyable

//3) 接口援用能够赋值实现类对象

flyable = new Bird();

flyable.fly();

flyable = new Plane();

flyable.fly();}

}
package com.wkcto.chapter01.interfaces.demo01;

/**

* 测试弹弓能够把能飞的物体给射出去

* @author

*

*/

public class Test02 {public static void main(String[] args) {

// 创立弹弓对象

Slingshot slingshot = new Slingshot();

// 创立鸟对象

Bird bird = new Bird();

slingshot.shoot(bird);

// 创立飞机对象

Plane plane = new Plane();

slingshot.shoot(plane);

}

}
package com.wkcto.chapter01.interfaces.demo01;

/**

* 弹弓类

* 能够把任何能飞物体给弹射进来

*

* 常常, 把接口的援用作为办法的形参, 在调用办法时, 传递接口实现类的对象

* @author

*

*/

public class Slingshot {

// 能够把任何能飞物体给弹射进来, 如果这个物体实现了 Flyable 航行接口就能飞

public void shoot(Flyable flyable) {

// 实际上是物体 在飞

flyable.fly();}

}

练习:游泳馆只接管会游泳的动物来游泳。

Java 接口阐明

1. 类实现了某个接口, 须要重写接口中的形象办法, 就具备了接口中定义的性能; 如果一个类实现了接口, 没有重写接口中所有的形象办法, 这个类须要定义为抽象类。

2. 一个类能够实现多个接口, 接口名之间应用逗号分隔, 这个类须要重写所有接口中所有的形象办法。

3. 接口也能继承, 并且反对多继承, 在子接口中能够扩大接口的性能。

4. 接口的内容在 JDK8 中, 只蕴含四局部: public abstract 默认的办法, public static final 默认的字段, public static 静态方法, public default 办法。

Java 抽象类与接口的异同点

相同点

1. 都能够定义形象办法

2. 都不能实例化对象

3. 接口 / 抽象类的形象办法都须要被重写

4. 接口 / 抽象类中都能够定义 public static final 字段, public static 静态方法

不同点

1. 意义不同

抽象类对类进行更高层级的形象

接口是对性能的封装

2. 定义形式不同

抽象类应用 abstract class 定义

接口应用 interface 定义

3. 内容不同

抽象类中除了能够定义形象办法外, 还能够定义实例变量 / 实例办法 / 动态变量 / 静态方法, 构造方法等一般类所有的成员。

接口中除了形象办法外, 还能够定义 public static final 字段, public static 办法,public default 办法。

抽象类有构造方法, 接口没有构造方法; 接口中能够应用 default 润饰办法,抽象类不能应用 default 润饰办法。

4. 应用形式不同

抽象类个别作为父类存在, 须要子类通过 extends 继承。

接口须要通过类 implements 实现。

5. 继承

类只反对单继承, 接口反对多继承

6. 利用场景不同

如果仅仅是为了扩大类的性能, 优先选择接口;

如果除了性能外, 还须要保留不同的数据, 抉择抽象类, 抽象类中的形象办法, 须要在子类中重写, 抽象类能够束缚所有的子类都具备某个性能。

Java 接口的利用

1. 接口就是性能的封装

如在 Flyable 接口中封装了 fly() 航行性能, 如果类实现了 Flyable 接口, 须要重写 fly() 办法, 就扩大了类的性能。

如零碎定义的 Comparable 接口, 封装了比拟两个对象的性能, 如果一个类想要比拟两个对象的大小, 能够实现 Comparable 接口。

package com.wkcto.chapter01.interfaces.demo03;

/**

* 定义 Person 类,

* 想要让 Person 类的对象具备比拟大小的性能, 能够通过实现 Comparable 接口实现这个需要

* Comparable 接口前面的 <T> 是一个泛型 , 泛型就是把数据类型作为参数

* 通过 Comparable 前面的泛型指定比拟对象的数据类型

* @author

*

*/

public class Person implements Comparable<Person> {

String name;

int age;

int height;

/**

* 重写接口的形象办法, 指定比拟规定

* 如果以后对象比参数 o 对象大就返回负数, 如果以后对象小于参数对象返回正数, 如果两个对象相等返回 0

*/

@Override

public int compareTo(Person o) {

// 在该办法中, 指定比拟规定, 依据年龄比拟

return this.age - o.age;

}

public Person(String name, int age, int height) {super();

this.name = name;

this.age = age;

this.height = height;

}

}

2. 接口能够了解为一组操作标准 (一个协定)

百度新闻蕴含首页 / 体育 / 游戏 / 女人 / 汽车等模块, 不论哪个模块都有增加新闻, 删除新闻, 批改新闻, 查问新闻. 能够把这些性能定义在一个接口中, 不同的模块通过实现这个接口来对立他们的操作。

提倡面向接口的编程

1. 接口的应用比拟灵便, 一个类在继承父类的同时, 能够实现多个接口

形容打工的学生, 打工的学生既有学生的特点, 又有工人的特色, 如果容许类的多继承的话, 能够间接让打工的学生同时继承学生类与工人类。

Java 不容许多继承, 能够让打工的学生继承学生类, 把打工这个操作定义为接口, 打工的学生实现打工接口。

形容了打工的学生, 从某种程度上, 还能解决类的多继承问题

package com.wkcto.chapter01.interfaces.demo04;

/**

* 定义学生类, 作为父类

* @author

*

*/

public class Student {

String name;

public void study() {System.out.println}

}
package com.wkcto.chapter01.interfaces.demo04;

/**

* 定义工作接口

* @author

*

*/

public interface Workable {void work();

}
package com.wkcto.chapter01.interfaces.demo04;

/**

*

* 在继承 Student 类的同时, 实现 Workable 接口

* @author

*

*/

public class PartTimeStudent extends Student implements Workable, Singable {

// 重写接口中的形象办法

@Override

public void work() {System.out.println}

@Override

public void sing() {System.out.println}

}

练习 1

1. 形容带橡皮的铅笔, 铅笔是一种笔, 有擦除的性能。

2. 接口比拟容易扩大, 能够实现代码的可插拔

常常把接口的援用作为办法的形参, 在调用办法时, 能够传递各种实现类对象

弹弓能够弹射能飞的物体, 游泳馆只接管会游泳的动物

3. 接口能够使我的项目分层

一台计算机能够实现很多不同的接口, 接口比拟灵便

计算机的 USB 插槽, 只有有 USB 插头的设施就能够连贯到电脑上, 接口易扩大

生产电脑的厂商有联想 /Dell/ 华硕等, 生产 USB 设施的也有很多不同的厂商, 使我的项目分层

在上图的模型中, 通过接口把我的项目简略地分为两层, 一个团队负责开发业务逻辑, 一个小组负责开发数据库的操作及优化, 对开发人员的要求升高了;当数据库发生变化后, 只须要由数据库的开发人员定义一个专门的操作数据库的类即可, 业务逻辑代码不须要更改。

package com.wkcto.chapter01.interfaces.demo05;

/**

* 定义操作数据库的接口

* 在接口中定义一组操作数据库的标准

* @author

*

*/

public interface DaoService {void add(); // 向数据库中增加数据

void delete(); // 删除数据

void update(); // 批改数据

void list(); // 显示所有数据}
package com.wkcto.chapter01.interfaces.demo05;

/**

* 业务逻辑模块 1

* 操作数据库, 通过 DaoService 接口实现

* @author

*

*/

public class LogicModel1 {

DaoService dao; // 定义一个接口的援用

// 增加数据

public void addData() {System.out.println("业务逻辑模块 1, 须要向数据库中增加数据");

dao.add();}

// 删除数据

public void deleteData() {System.out.println("业务逻辑模块 1, 须要从数据库中删除数据");

dao.delete();}

// 批改数据

public void updateData() {System.out.println("业务逻辑模块 1, 须要在数据库中批改数据");

dao.update();}

// 显示所有数据

public void listAllData() {System.out.println("业务逻辑模块 1, 须要从数据库中显示所有数据");

dao.list();}

}
package com.wkcto.chapter01.interfaces.demo05;

/**

* 定义一个操作 MySQL 数据库的类, 须要实现 DaoServic 接口

* @author

*

*/

public class MySqlDaoImpl implements DaoService {

@Override

public void add() {System.out.println("向 MySQL 数据库中增加数据");

}

@Override

public void delete() {System.out.println("从 MySQL 数据库中删除数据");

}

@Override

public void update() {System.out.println("在 MySQL 数据库中批改数据");

}

@Override

public void list() {System.out.println("从 MySQL 数据库中查问所有数据");

}

}
package com.wkcto.chapter01.interfaces.demo05;

/**

* 测试业务逻辑模块操作数据库

* @author

*

*/

public class Test {public static void main(String[] args) {LogicModel1 model1 = new LogicModel1();

// 须要配置业务逻辑模块中 dao 接口援用

// model1.dao = new MySqlDaoImpl();

// 如果数据库由 MySQL 换为 Oracle, 须要定义一个操作 ORacle 数据库的类, 批改业务逻辑模块 dao 接口的配置

model1.dao = new OracleDaoImpl();

model1.addData();

model1.updateData();

model1.deleteData();

model1.listAllData();}

}

练习 2

模仿所有动物都能够应用本人的交换形式进行交换, 人说人话, 狗说狗语。

package com.wkcto.chapter01.interfaces.demo06;

/**

* 定义谈话形式接口

* @author

*

*/

public interface Speakable {void speak(); // 谈话

}
package com.wkcto.chapter01.interfaces.demo06;

/**

* 汪语

* 是一种谈话形式

* @author

*

*/

public class WangWang implements Speakable {

@Override

public void speak() {System.out.println("汪汪汪~~~~");

}

}
package com.wkcto.chapter01.interfaces.demo06;

/**

* 定义动物类

* 每个 动物都有本人的谈话形式

* 动物能够应用本人的谈话形式进行交换

* @author

*

*/

public abstract class Animal {

Speakable speakable; // 每个 动物都有本人的谈话形式

public Animal(Speakable speakable) {super();

this.speakable = speakable;

}

// 能够应用本人的谈话形式进行交换

public void talk() {speakable.speak();

}

}
package com.wkcto.chapter01.interfaces.demo06;

/**

* 小狗是一种动物

* @author

*

*/

public class Dog extends Animal {public Dog(Speakable speakable) {super(speakable);

}

}
package com.wkcto.chapter01.interfaces.demo06;

/**

* 测试每种动物能够应用本人的谈话形式进行交换

* @author

*

*/

public class Test {public static void main(String[] args) {WangWang wangWang = new WangWang(); // 小狗的谈话形式

Dog dahuang = new Dog(wangWang); // 在创立小狗对象时, 须要指定它的谈话形式

dahuang.talk();

MiaoMiao miaoMiao = new MiaoMiao();

Cat mimi = new Cat(miaoMiao);

mimi.talk();}

}

下面就是《Java 接口》。的分享,接下来为大家梳理《Java 类与类之间的关系》。

也欢送大家交换探讨,该文章若有不正确的中央,心愿大家多多包涵。

你们的反对就是我最大的能源,如果对大家有帮忙给个赞哦~~~

正文完
 0