文章目录
- (一)编程实现
- 1、创建NetCard接口
- 2、创建USB接口
- 3、创建Computer抽象类
- 4、创建笔记本电脑类 - Laptop
- 5、创建笔记本电脑测试类
- (二)讲解知识点
- 1、思维导图
- 2、知识点说明
- (三)拓展练习
- 任务1、创建Animal类,继承Animal类创建Cat类、Dog类和Bird类
- 任务2、创建Shape接口,创建Circle类和Rectangle类实现Shape接口
- 任务3、显示一个Swing窗口
- 创建NetCard接口和USB接口,创建Computer抽象类,然后继承Computer类,实现NetCard接口和USB接口,创建笔记本电脑类Laptop。
- Java简化了C++的多重继承,是单根继承,只能继承一个类,但是作为补偿,Java允许实现多个接口,让一个类可以实现更多的特性。
- 在Java里,继承一个类,实现多个接口,就好比是只有一个父亲,可以有多个叔叔。
(一)编程实现
1、创建NetCard接口
在net.huawei.p03.t02
包里创建NetCard
接口
public interface NetCard {
void connectNetwork(); // 抽象方法,默认是public权限
default void speak() { // 缺省方法(从JDK8开始)
System.out.println("网卡用于连接网络……");
}
static void tell() { // 静态方法(从JDK8开始)
System.out.println("我是一张网卡……");
}
}
2、创建USB接口
在net.huawei.p03.t02
包里创建USB
接口
public interface USB {
String TYPE = "3.0"; // 接口只能定义常量
void connectUSB(); // 抽象方法
}
3、创建Computer抽象类
在net.huawei.p03.t02
包里创建Computer
抽象类
public abstract class Computer {
public abstract void compute(); // 抽象方法,必须要有abstract关键字
public abstract void compute(String item); // 重载(Overload)的抽象方法
public void speak() { // 普通方法
System.out.println("我是一台计算机……");
}
}
- 注意:抽象类里可以包含普通方法,甚至可以不包含抽象方法
4、创建笔记本电脑类 - Laptop
在net.huawei.p03.t02
包里创建Laptop
类
- Laptop继承Computer抽象类,实现NetCard和USB接口
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 compute() {
System.out.println("笔记本电脑[" + name + "]正在计算中……");
}
@Override
public void compute(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>
- 查看一下Latop的类图
- 我们可以看一看比较复杂的类图(继承JFrame,创建LoginFrame)
5、创建笔记本电脑测试类
在net.huawei.p03.t02
包里创建TestLaptop
类
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.compute();
laptop.compute(item);
}
}
- 运行程序,查看结果
- 代码说明:
Computer
类除了两个重载的抽象方法之外,还有一个普通方法speak()
,这个方法不是私有的,因此它的子类Laptop
就能继承这个方法,于是laptop.speak()
方法会输出“我是一台计算机……”
(二)讲解知识点
1、思维导图
2、知识点说明
- 抽象类不能实例化
- 使用抽象类的匿名子类
- 创建一个类,如果没有显式地继承某个类,那么它就是Ojbect类的子类
(三)拓展练习
任务1、创建Animal类,继承Animal类创建Cat类、Dog类和Bird类
- Animal的类图
- Cat的类图
- Dog的类图
- Bird的类图
任务2、创建Shape接口,创建Circle类和Rectangle类实现Shape接口
- Shape接口的类图(getCircumference和getArea是抽象方法,getType是缺省方法,getPI是静态方法)
- Circle的类图
- Rectangle的类图
任务3、显示一个Swing窗口
- 创建
LoginFram
类,继承JFrame
public class LoginFrame extends JFrame {
/**
* 构造方法
*
* @param title
*/
public LoginFrame(String title) {
super(title); // super表示父类的实例
initGUI(); // 初始化用户界面
}
/**
* 初始化图形用户界面
*/
private void initGUI() {
// 设置窗口属性
this.setVisible(true); // 让窗口可见
this.setBounds(200, 200, 500, 400); // 设置窗口边界(位置与大小)
this.setLocationRelativeTo(null); // 让窗口屏幕居中
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭窗口时退出应用程序
}
public static void main(String[] args) {
// 创建登录窗口匿名对象
new LoginFrame("用户登录");
}
}
- 运行程序,查看结果
- 希望在窗口里添加一个按钮,单击它会弹出一个消息框,网页设计里通过脚本来实现,如下图所示。
public class LoginFrame extends JFrame {
private JButton btnLogin;
/**
* 构造方法
*
* @param title
*/
public LoginFrame(String title) {
super(title); // super表示父类的实例
initGUI(); // 初始化用户界面
eventHandling(); // 进行事件处理
}
/**
* 事件处理
*/
private void eventHandling() {
// 给登录按钮注册动作监听器,实现监听器接口,编写事件处理方法
btnLogin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "哈哈,今天立夏,欢迎登录~");
}
});
}
/**
* 初始化图形用户界面
*/
private void initGUI() {
// 创建按钮对象
btnLogin = new JButton("登录");
btnLogin.setFont(new Font("楷体", Font.PLAIN, 20));
// 获取窗口的内容面板(Container --> JPanel)
JPanel panel = (JPanel) this.getContentPane();
// 设置内容面板布局 - 流式布局
panel.setLayout(new FlowLayout());
// 将按钮对象添加到内容面板
panel.add(btnLogin);
// 设置窗口属性
this.setVisible(true); // 让窗口可见
this.setBounds(200, 200, 400, 300); // 设置窗口边界(位置与大小)
this.setLocationRelativeTo(null); // 让窗口屏幕居中
this.setResizable(false); // 让窗口不能调整尺寸
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭窗口时退出应用程序
}
public static void main(String[] args) {
// 创建登录窗口匿名对象
new LoginFrame("用户登录");
}
}
- 运行程序,查看结果