商城首页欢迎来到中国正版软件门户

您的位置:首页 > 编程开发 >JAVA接口与抽象类怎么使用

JAVA接口与抽象类怎么使用

  发布于2023-04-25 阅读(0)

扫一扫,手机访问

JAVA接口与抽象类怎么使用

接口

概述

  1. 当需要从几个类中派生出一个类,继承他们所有的属性和方法,JAVA没有多重继承需要用接口实现

  2. 从几个类中抽取出一些共同的行为特征,而他们之间又没有is-a的关系,也需要借助接口实现

  3. 接口本质是契约,规范

使用

  1. 接口中使用interface来定义

  2. 接口和类是两个不同的结构

  3. 接口中不能定义构造器(也就不能实例化)

  4. 接口通过类来实现implements

  5. JAVA类可以实现多个接口格式:class AA extends BB interface CC,DD

  6. 接口与接口之间可以继承,并且可以多继承

  7. 接口体现了多态性

public class UsbTest {
    public static void main(String[] args) {
        Computer com =new Computer();
        Flash flash=new Flash();
        com.transferData(flash); // USB usb =new Flash()
        com.transferData(new Printer());
        /*
		* U盘开始工作
		* 传输数据
		* U盘结束工作
		* 打印机开始工作
		* 传输数据
		* 打印机结束工作
		* 
		* */
    }}class Computer{
    public void transferData(USB usb){
        usb.start();
        System.out.println("传输数据");
        usb.stop();
    }}interface USB{
    void start();
    void stop();}class Flash implements USB{

    @Override
    public void start() {
        System.out.println("U盘开始工作");
    }

    @Override
    public void stop() {
        System.out.println("U盘结束工作");

    }}class Printer implements USB{

    @Override
    public void start() {
        System.out.println("打印机开始工作");

    }

    @Override
    public void stop() {
        System.out.println("打印机结束工作");

    }}
  1. JDK8的写法

  • 接口中定义的静态方法,只能通过接口调用

  • 通过实现类的对象,可以实现接口中的默认方法

  • 如果子类(或者实现类)继承的父类和实现的接口中声明了同名同参数方法,如果子类没有重写该方法,调用的是父类中同名同参数方法

public class JDK8Test {
    public static void main(String[] args) {
        SubClass sub =new SubClass();
        CompareA.methods1();
        sub.methods2();
        /*
        * Compare 北京
		* Compare 上海
        */
    }}class SubClass implements CompareA{}interface CompareA{
    public static void methods1() {
        System.out.println("Compare 北京");
    }
    public default void methods2() {
        System.out.println("Compare 上海");
    }}

代理模式

  1. 代理模式就是为其他对象提供一种代理以控制对这个对象的访问

  2. 实例

public class NetWorkTest {
    public static void main(String[] args) {
        Server server=new Server();
        ProxyServer proxyServer=new ProxyServer(server); // 放的是被代理对象进去
        proxyServer.browse(); // 调用的是代理对象,但结果是真实对象的方法被调用
        /*
        * 检查工作
		* 真实服务器访问网络
        */
    }}interface NetWork{
    void browse();}// 被代理类class Server implements NetWork{

    @Override
    public void browse() {
        System.out.println("真实服务器访问网络");
    }}// 代理类class ProxyServer implements NetWork{
    private NetWork work;
    public ProxyServer(NetWork work){
        this.work=work;
    }
    public void check(){
        System.out.println("检查工作");
    }

    @Override
    public void browse() {
        check();
        work.browse();
    }}

内部类

  1. JAVA允许将一个类A声明在另一个类B中,则类A是内部类,类B是外部类

  2. 内部类分类

  • 成员内部类

    • 静态 static

    • 非静态

  • 局部内部类

    • 方法内

    • 代码块内

    • 构造器内

  1. 实例化内部类对象

public class InnerClassTest {
    public static void main(String[] args) {
        // 实例化Dog,静态类
        Pseson.Dog dog=new Pseson.Dog();
        dog.eat();
        // 吃骨头
        // 实例化Cat,非静态类
        Pseson p1 =new Pseson();
        Pseson.Cat cat=p1.new Cat();
        cat.eat();
        // 猫吃鱼
    }}class Pseson{
    String name;
    int age;
    public void eat(){
        System.out.println("吃饭");
    }
    static class Dog{
        String name;
        int age;
        public void eat(){
            System.out.println("吃骨头");
        }
    }
    class Cat{
        public void eat(){
            System.out.println("猫吃鱼");
        }
    }}
  1. 调用外部类结构

public class InnerClassTest {
    public static void main(String[] args) {
        // 实例化Cat,非静态类
        Pseson p1 =new Pseson();
        Pseson.Cat cat=p1.new Cat();
        cat.eat();
        cat.display("小花");
        /*
        * 小花
        * 波斯猫
        * 人
        */ 
    }}class Pseson{
    String name="人";
    int age;
    public void eat(){
        System.out.println("吃饭");
    }
    static class Dog{
        String name;
        int age;
        public void eat(){
            System.out.println("吃骨头");
        }
    }
    class Cat{
        String name="波斯猫";
        public void eat(){
            System.out.println("猫吃鱼");
        }
        public void display(String name){
            System.out.println(name); // 方法中name
            System.out.println(this.name); // 内部类中name
            System.out.println(Pseson.this.name); // 外部类中name

        }
    }}
  1. 接口与抽象类

  • 相同点:不能实例化;都包含抽象方法;能被继承

  • 不同点:抽象类有构造器,接口没有构造器;抽象类只有单继承,而接口可以多继承;抽象类extands继承,接口implements实现

本文转载于:https://www.yisu.com/zixun/723370.html 如有侵犯,请联系admin@zhengruan.com删除

热门关注