关于java的简单笔记-接口and多态and继承

一、接口

类和类之间是单继承的关系===>一个子类只能继承一个父类
类和接口之间是多实现的关系===>一个实现类可以实现多个接口
接口和接口之间是多继承的关系===>一个接口可以继承多个接口

1.1 接口的概念

JDK接口中只有抽象类和常量,在JDK8后还可以写入具体的方法
由于接口是规范的,那么规范的就一定是公开的,因此都是public的
关于常量

// 常量-一定要预先进行初始化
// public static final String School_name = "黑马";
String School_name = "黑马";

关于抽象方法

void run();
    // public abstract void run();

1.2 接口的实现

接口象征着一种规范

// 定义一个接口类-运动员,每个运动员都要会跑步、比赛。
public interface Sportman {
    void run();
    void competition();
}
// 定义一个接口类-法律,法律是有一些规则的
public interface Law {
    void rule();
}

实现类实现接口,就要实现接口中的所有抽象方法

// 定义一个乒乓球运动员类,他要会执行运动员的所有功能和遵守法律的所有规则
public class PingPongMan implements Sportman,Law{
    private String name;
    public PingPongMan(String name) {
        this.name = name;
    }
    @Override
    public void run() {
        System.out.println(name + "必须跑步训练");
    }
    @Override
    public void competition() {
        System.out.println(name + "必须竞赛");
    }
    @Override
    public void rule() {
        System.out.println(name + "必须遵纪守法");
    }
}

1.3 接口之间可以继承

当一个实现类要实现的接口太多的时候,接口的继承就体现了作用

// 定义一个People类-所有的人都会吃饭睡觉
public interface People {
    void eat();
    void sleep();
}
// 定义一个法律类-法律有自己特定的规则
public interface Law {
    void rule();
}
// 定义一个运动员接口类-这个接口可以继承法律类和People类
public interface SportMan extends Law , People{
    void run();
    void competition();
}

由于接口类继承了,那么在写实现类的时候,可以变得简单一些

// 定义一个运动员类,实现以上三个接口类
// 也可以写成
// public class BasketballMan implements SportMan,Law,People
public class BasketballMan implements SportMan {
    @Override
    public void rule() {}
    @Override
    public void eat() { }
    @Override
    public void sleep() { }
    @Override
    public void run() { }
    @Override
    public void competition() { }
}

二、多态

访问特定
方法调用时:编译看左边,运行看右边
变量调用时:编译看左边,运行也看左边
KeyBoard类和Mouse类都继承了USB类
Mouse和KeyBoard都实现了USB类中的installUSB方法
public class Test {
    public static void main(String[] args) {
        Computer c = new Computer("外星人");

        USB u = new KeyBoard("键盘");
        c.installUSB(u);

        USB u1 = new Mouse("罗技");
        c.installUSB(u1);

    }
}

三、内部类

3.1 匿名内部类(重要)

本质是一个没有名字的局部内部类

public class Test {
    public static void main(String[] args) {
//        Animal a = new tiger();
//        a.run();
        Animal a = new Animal() {
            @Override
            public void run() {
                System.out.println("我会跑欸");
            }
        };
        a.run();
    }
}
 子类
//class tiger extends Animal{
//    @Override
//    public void run(){
//        System.out.println("老虎跑的快");
//    }
//}
// 父类
abstract class Animal{
    public abstract void run();
}

格式

Employee a = new Employee(){
	public void work(){}
};
a.work();

匿名内部类简化代码情况

public class Test2 {
    public static void main(String[] args) {
        Swimming s = new Swimming() {
            @Override
            public void swim() {
                System.out.println("学生快乐的游泳");
            }
        };
        go(s);
        System.out.println("--------------");
        Swimming s1 = new Swimming() {
            @Override
            public void swim() {
                System.out.println("老师游的也快");
            }
        };
        go(s1);
    }
    public static void go(Swimming s){
        System.out.println("开始。。。");
        s.swim();
        System.out.println("结束。。。");
    }
}
class Student implements Swimming{

    @Override
    public void swim() {
        System.out.println("学术快乐的自由泳");

    }
}
interface Swimming{
    void swim();
}

匿名内部类的应用

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Test3 {
    public static void main(String[] args) {
        JFrame win = new JFrame("登录界面"); // 创建一个窗口
        JPanel panel = new JPanel(); // 创建一个桌布
        win.add(panel); // 把桌布放在win界面上
        JButton btn = new JButton("登录"); // 创建一个按钮 
        // 匿名内部类为按钮添加一个监听事件
        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(win,"点我一下");
            }
        });
        panel.add(btn); // 把按钮添加到桌布上
        // 定义一下格式
        win.setSize(400,300);
        win.setLocationRelativeTo(null);
        win.setVisible(true);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值