• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
卡苏米
博客园    首页    新随笔    联系   管理    订阅  订阅

笔记总结九

笔记总结九

01-接口介绍

  • 接口主要体现的是对规则的声明

  • 问题 : 什么时候我们需要定义接口 ?

    • 发现一个类中, 所有的方法, 全部都是抽象方法, 这个类的唯一价值, 就只是在声明规则, 对于这种类

    • 通常会改写为 Java 中接口.

    • 理解 : 100% 抽象类

interface Inter {
public abstract void methodA();
public abstract void methodB();
}

02-接口的定义和使用

  • 定义格式 :

public interface 接口名 {}
  • 注意 : 接口不允许实例化 (不允许创建对象) , 我们应该关注的是接口的实现类

  • 实现接口的格式 :

public class 类名称 implements 接口名 {}
  • 作为接口的实现类 (子类)

1. 重写所有的抽象方法
2. 将实现类变成一个抽象类

03-接口中的成员特点

  • 成员变量

    • 只能是常量 , 因为默认被三个关键字修饰

      public static final
      ​
      这三个关键字没有顺序关系
  • 成员方法

    • 只能是抽象方法 , 因为默认加入了两个关键字 (jdk8版本之前正确的)

      public abstract
    • jdk8版本开始, 接口中允许定义, 带有方法体的普通方法了

    • jdk9版本开始, 接口中可以定义私有方法, 和静态方法

  • 构造方法

    • 没有构造方法

04-接口和类之间的各种关系

  • 类与类 :

继承关系, 只支持单继承, 不支持多继承, 但是可以多层继承
  • 类与接口 :

实现关系, 可以单实现, 也可以多实现, 并且可以在继承一个类的同时, 实现多个接口
  • 接口与接口 :

继承关系, 可以单继承, 也可以多继承

05-JButton 按钮组件

  • 构造方法

public JButton() :  创建一个不带任何文本和图片的按钮组件
public JButton(String text) : 创建一个带有传入字符串的按钮组件
  • 将按钮添加到面板中

1. JFrame窗体为面板指定了默认的布局方式, 我们需要取消默认布局, 才能够让组件摆放的更灵活
frame.setLayout(null);
​
2. 当取消了默认布局之后, 一定要指定组件的摆放位置
  btn.setBounds(x,y,width,height);
​
3. 添加到面板
  frame.getContentPane().add(组件);

06-JLabel (图片\文本组件)

  • JLbale 是一块区域, 区域中可以展示文本和图片

  • 构造方法 :

public JLabel() : 创建一个不带文本和图片的JLabel对象
public JLabel(String text) : 可以在构造方法中, 指定要展示的文字
public JLabel(Icon image) : 在构造方法中, 传入 ImageIcon 对象, 指定要展示的图片
​
​
JLabel jl1 = new JLabel("展示文字");
JLabel jl2 = new JLabel(new ImageIcon("D:\\image\\2.png"));

07- ActionListener - 动作监听

  • 监听到鼠标左键 , 空格按键

JButton btn = new JButton("点我");
​
btn.addActionListener(ActionListener的实现类对象);
​
多态的应用:
​
public void addActionListener(ActionListener l) {
  listenerList.add(ActionListener.class, l);
}
​
形参: ActionListener l
实参: new AImpl();
​
ActionListener l = new AImpl();

08- MouseListener - 鼠标监听 (了解)

  • 监听(鼠标点击,鼠标按下,鼠标松开,鼠标滑入,鼠标滑出)

JButton btn = new JButton("点我");
​
btn.addMouseListener(MouseListener的实现类对象);
​
public synchronized void addMouseListener(MouseListener l) {
       if (l == null) {
           return;
      }
       mouseListener = AWTEventMulticaster.add(mouseListener,l);
       newEventsOnly = true;
​
       // if this is a lightweight component, enable mouse events
       // in the native container.
       if (peer instanceof LightweightPeer) {
           parent.proxyEnableEvents(AWTEvent.MOUSE_EVENT_MASK);
      }
}
​
形参: MouseListener l
实参: new AImpl();
​
MouseListener l = new AImpl();  // -- 多态

09- KeyListener - 键盘监听 (重点)

  • 任务 : 能够对窗体加入键盘监听, 并能够区分出上下左右谁被按下了

    • keyCode

      • 37 (左)

      • 38 (上)

      • 39 (右)

      • 40 (下)

  • 监听 (键盘按下, 键盘松开, 键盘键入)

JFrame frame = new JFrame();
​
frame.addKeyListener(KeyListener实现类对象);

10- 多态的介绍和前提

  • 封装 : 隐藏实现细节, 仅对外暴露公共的访问方式

  • 继承 : 让类与类之间产生关系, 子父类关系, 子类就可以直接使用父类的非私有成员

  • 多态 : 对象在不同时刻, 体现的不同种形态

    Cat c = new Cat();           // 这个对象, 以猫的形态所体现
    Animal a = new Cat();       // 这个对象, 以动物猫的形态所体现
    ​
    - 落地到实际代码中, 多态到底是什么?

    - 父类引用指向子类对象
    - 注意: 这种写法并不是随便就能写的
  • 多态的前提条件 :

    • 要有继承\实现关系

    • 要有方法重写

    • 要有父类引用指向子类对象

11- 多态成员的访问特点

  • 当我们以父类引用指向子类对象之后, 调用成员有哪些特点 ?

  • 成员变量:

    • 编译看左边 (父类), 运行看左边(父类)

  • 成员方法:

    • 编译看左边(父类), 运行看右边(子类)

12- 多态的好处和弊端

  • 好处 :

    • 提高了代码的扩展性

    • 体现 : 将方法的形参定义为父类类型, 这个方法就能接收该父类的任意子类对象

  • 弊端 :

    • 不能调用子类特有的成员

  • 问题 : 非要调用子类特有的成员, 怎么办 ?

    • 直接创建子类对象

      • 强调的原因 : 一般来说, 多态创建对象之后, 都只调用共性的成员

    • 向下转型

13-多态的转型问题

  • 向上转型 (比对隐式转换)

    • 父类引用指向子类对象

    Fu f = new Zi();
  • 向下转型 (比对强制转换)

    • 将对象, 从新指向到子类的引用

    Zi z = (Zi)f;

14-instanceof关键字

  • 避免向下转型的安全隐患

  • 异常 : ClassCastException : 在引用数据类型的强转过程中, [实际类型] 和 [目标类型] 不匹配

Animal a = new Dog();
Cat c = (Cat)a;   // 出现问题
  • instanceof 的介绍 : 判断当前对象的引用, 记录的类型

public static void useAnimal(Animal a) {
                                        // Animal a = new Cat();
                                        // Animal a = new Dog();
   a.eat();
​
   if(a instanceof Cat ){
       // 强转成Cat
       Cat c = (Cat) a;
       c.catchMouse();
  }else if(a instanceof Dog) {
       // 强转成Dog
       Dog d = (Dog) a;
       d.watchHome();
  }
}

 

posted @ 2021-07-22 22:34  卡苏米  阅读(77)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3