任务2、创建笔记本电脑类(继承一个类,实现多个接口)
- 创建NetCard接口和USB接口,创建Computer抽象类,然后继承Computer类,实现NetCard接口和USB接口,创建笔记本电脑类Laptop。
- Java简化了C++的多重继承,是单根继承,只能继承一个类,但是作为补偿,Java允许实现多个接口,让一个类可以实现更多的特性。
- 在Java里,继承一个类,实现多个接口,就好比是只有一个父亲,可以有多个叔叔。
(一)编程实现
1、创建NetCard接口
- 在
net.ouyangyi.p03.t02
包里创建NetCard
接口
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5f8437017048a6c9f8f67410451654c2.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e1603849d633b45ed66c1c51ee174319.png)
2、创建USB接口
- 在
ouyangyi.p03.t02
包里创建USB
接口
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4ce042cee1a7914f138dce69d329c8bb.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8bc9b98e74631fb44694ce52107ce3c7.png)
3、创建Computer抽象类
- 在ouyanyi.p03.t02包里创建Conputer抽象类
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d0d60c9e5e481992bc2a979586fa320b.png)
package net.ouyangyi.p03.t02;
public abstract class Computer {
public abstract void computer();
public abstract void computer(String inem);
public void speak() {
System.out.println("我是一台计算机....");
}
}
- 注意:抽象类里可以包含普通方法,甚至可以不包含抽象方法
4、创建笔记本电脑类 - Laptop
- 在
net.ouyangyi.p03.t02
包里创建Laptop
类
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8e1c42713e1896a73dfb93e57cc6d4d7.png)
- Laptop 继承Computer抽象类,实现NetCard和USB接口
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c678d67abb56adddd16393aad59e1664.gif)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c2e2683c563ee1540b497608fa3015db.png)
package net.ouyangyi.p03.t02;
public class Laptop extends Computer implements NetCard,USB {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void computer() {
System.out.println("笔记本电脑[" + name + "]正在计算中......");
}
@Override
public void computer(String item) {
System.out.println("笔记本电脑[" + name + "]正在计算[" + item + "]。");
}
@Override
public void connectNetwork() {
System.out.println("笔记本电脑[" + name + "]正在连接网络......");
}
@Override
public void connectUSB() {
System.out.println("笔记本电脑[" + name + "]正在连接USB接口......");
}
}
- 其实,子类相对于父类,可以添加属性成员,还可以添加方法成员,甚至可以覆盖父类的同名同参方法,这个操作叫做
Override
(重写) - 此时,查看类的层次结构图,按组合键
Ctrl+H
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a83ac59b88f5cc18eefcbc4542420e53.png)
- 查看一下Laptop的类图
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0ae4921a19b991cde0612ff6b3d9c44d.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c81cc2447ae6e4c16ab1a1a5748893af.png)
- 我们可以看一看比较复杂的类图(继承JFrame,创建LoginFrame)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/12ea068c41ca61f5b9c46c4d330cd45c.png)
5、创建笔记本电脑测试类
net.ouyangyi.p03.t02
包里创建TestLaptop
类
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/27c191aa894bead048b5202f8215466c.png)
package net.ouyangyi.p03.t02;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TestLaptop {
public static void main(String[] args) throws IOException {
String name, item;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("笔记本电脑名:");
name = br.readLine();
System.out.print("计算项目名:");
item = br.readLine();
Laptop laptop = new Laptop();
laptop.setName(name);
laptop.speak();
laptop.connectUSB();
laptop.connectNetwork();
laptop.computer();
laptop.computer(item);
}
}
- 运行程序,查看结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e3a6c2360d0c30c46d3d2433961fa321.gif)
- 代码说明:Computer类除了两个重载的抽象方法之外,还有一个普通方法speak(),这个方法不是私有的,因此它的子类Laptop就能继承这个方法,于是laptop.speak()方法会输出“我是一台计算机……”
(二)讲解知识点
1、知识点说明
- 抽象类不能实例化
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f579d92f38de0e6f56da699f723cb6bb.png)
- 使用抽象类的匿名子类
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1e002f02bbf961f4262a18aed9cf893d.png)
- 创建一个类,如果没有显示的继承某个子类,那么它就是Ojbect类的子类