java中的接口、监听与多态

day9

1.接口

01.定义

public interface 接口名{}

02.接口的使用

public class 类名 implements 接口名{}

  • 不能创建对象,需要用实现类
  • 用接口去实现类

03接口子类

  • 重写所有抽象方法
  • 将自己变成抽象方法

04.接口成员特点

  1. 构造方法:没有构造方法
  2. 成员变量:只能是常量,
    默认加入三个关键字 public static final
  3. 成员方法:只能是抽象方法
    默认加入两个关键字 public abstract

05.接口和类之间的关系

  1. 类与类:继承关系(不支持多继承)
  2. 接口与类:实现关系
  3. 接口与接口:继承关系,可以单继承、多继承

2.监听

01.JButton组件

构造方法

  • public JButton() : 空白的, 不带任何文本和图片的按钮
  • public JButton(String text) : 创建一个带有文本的按钮组件

案例:

  public class l1button1 {
      public static void main(String[] args) {
          //1.设置窗体
          JFrame frame = new JFrame();
          //2.设置窗体宽高
          frame.setSize(500,500);
          //3.设置窗体关闭模式
          frame.setDefaultCloseOperation(3);
          //5.取消默认布局
          frame.setLayout(null);
  
              //创建按钮
              JButton ab = new JButton("按钮f");
              //按钮宽高:组件对象.setBounds(x,y,width,height);
              ab.setBounds(0,0,100,100);
              /*添加到面板:
              窗体对象.getContentPane().add(组件)
              */
              frame.getContentPane().add(ab);
  
 
          //4.设置窗体可见
          frame.setVisible(true);
      }
  }

02.JLabel组件:

用于展示文本和图片

构造方法 :

  • public JLabel() : 创建一个不带文本, 不带图片的区域

  • public JLabel(String text) : 创建一个带文本的区域

案例:

//展示文本
          JLabel as = new JLabel("你好啊");
          as.setBounds(100,0,100,100);
          frame.getContentPane().add(as);

//展示图片
      JLabel as2 = new JLabel(new ImageIcon("C:\\image\\1.jpg"));
      as2.setBounds(0,100,100,100);
      frame.getContentPane().add(as2);

03.注册监听

ActionListener

ActionListener: 动作监听(鼠标左键, 空格)

案例:

   public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(500,500);
        frame.setDefaultCloseOperation(3);
        frame.setLayout(null);

        JButton aq = new JButton("按钮f");
        aq.setBounds(100,0,100,100);
        frame.getContentPane().add(aq);
//添加动作监听,需要一个接口的实现类对象
        aq.addActionListener(new Actionimpl());


        frame.setVisible(true);
    }
}
//创建一个接口
class Actionimpl implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("我被点了");
    }
}
KeyListener

KeyListener :键盘监听(键盘按下了, 键盘松开了)

案例:

//添加键盘监听,需要一个接口的实现类对象
frame.addKeyListener(new KetlistenerImpl());

        frame.setVisible(true);
    }
}
//创建一个接口
class KetlistenerImpl implements KeyListener{

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println("键盘被按下");
    }

    @Override
    public void keyReleased(KeyEvent e) {
        System.out.println("键盘北宋开了");
    }

3.多态

01.前提条件

有继承关系

方法重写

有父类引用指向子类对象

02.访问特点

成员方法:编译看左边(父类),运行看右边(子类)

成员变量:编译看左边(父类),运行看左边(父类)

03.向上转型与向下转型

向上转型:父类引用指向子类对象

向下转型:将子类对象的地址,重新赋值给子类的引用

注:会存在类型转换异常,可利用instanceof进行纠正

案例:

  • 向上转型:Fu f = new Zi();
public static void main(String[] args) {
    student(new student1());
    student(new student2());
}

public static void student(Fu s) {
    s.work();
}
  • 向下转型用instance纠正:Zi z = (Zi)f;
public static void main(String[] args) {
    student(new student1());
    student(new student2());
}

public static void student(Fu s) {
    s.work();
    if (s instanceof student1){
    //强转成student1
        student1 p1 = (student1) s;
        p1.play1();
    }
    else if (s instanceof student2){
    强转成student2
        student2 p2 = (student2) s;
        p2.play2();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清淡的粥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值