创建笔记本电脑类(继承一个类,实现多个接口)

任务2、创建笔记本电脑类(继承一个类,实现多个接口)

创建NetCard接口和USB接口,创建Computer抽象类,然后继承Computer类,实现NetCard接口和USB接口,创建笔记本电脑类Laptop。
Java简化了C++的多重继承,是单根继承,只能继承一个类,但是作为补偿,Java允许实现多个接口,让一个类可以实现更多的特性。
在Java里,继承一个类,实现多个接口,就好比是只有一个父亲,可以有多个叔叔。

(一)编程实现

1、创建NetCard接口

· 在p03.t02包里创建NetCard接口在这里插入图片描述

package p03t02;

/**
 * 功能:
 * 作者:李悦
 * 日期:2022年05月05日
 */
public interface NetCard {
    void connectNetwork();//抽象方法,默认的 public权限

    default void speak() {
        System.out.println("网卡用于网络连接.....");
    }

    static void tell() {
        System.out.println("我是一张网卡");
    }
}

2、创建USB接口

· 在p03.t02包里创建USB接口
在这里插入图片描述

package p03t02;

/**
 * 功能:
 * 作者:李悦
 * 日期:2022年05月05日
 */
public interface USB {
    String TYPE = "3.0"; //接口只能定义常量
    void connectUSB(); //抽象方法
}

3、创建Computer抽象类

· 在p03.t02包里创建Computer抽象类
在这里插入图片描述

package p03t02;                                                   
                                                                  
/**                                                               
 * 功能:                                                            
 * 作者:李悦                                                          
 * 日期:2022年05月05日                                                 
 */                                                               
public abstract class Computer {                                  
    public abstract void compute();// 抽象方法,必须要有abstract关键词        
    public abstract void compute(String item);// 重载(overload)的抽象方法
                                                                  
    public void speak() { //普通方法                                  
        System.out.println("我是一台计算机....");                        
    }                                                             
                                                                  
}                                                                 
                                                                  

·注意:抽象类里可以包含普通方法,甚至可以不包含抽象方法

4、创建笔记本电脑类 - Laptop

· 在p03.t02包里创建Laptop类
在这里插入图片描述
· Laptop继承Computer抽象类,实现NetCard和USB接口

package p03t02;

/**
 * 功能:笔记本电脑类
 * 作者:李悦
 * 日期:2022年05月05日
 */
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(重写)。

· 此时,查看类的层次结构图,按组合键+
在这里插入图片描述
· 查看一下Latop的类图

在这里插入图片描述

5、创建笔记本电脑测试类

· p03.t02包里创建TestLaptop类
在这里插入图片描述

package p03t02;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 功能:测试笔记本电脑
 * 作者:李悦
 * 日期:2022年05月05日
 */
public class TsetLatop {
    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()方法会输出“我是一台计算机……”

显示一个Swing窗口

· 创建LoginFram类,继承JFrame
在这里插入图片描述

package p03.t02;

import javax.swing.*;

/**
 * 功能:登录窗口
 * 作者:华卫
 * 日期:2022年05月05日
 */
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("用户登录");
    }
}
package p03.t02;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * 功能:登录窗口
 * 作者:华卫
 * 日期:2022年05月05日
 */
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("用户登录");
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值