栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

Java之抽象类接口

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java之抽象类接口

文章目录
  • 写在前面
  • 抽象类
    • 抽象类的特点
  • 接口
    • 接口的特点

写在前面

我们要来学习一些更加抽象的东西了,我们学习了多态,知道了什么是动态绑定,不过这还不够,我们一起来看看抽象类,同时我们一起学习什么是接口

抽象类

看看下面的代码

class Shape {
    public void draw() {

    }
}
class Triangle extends Shape {
    @Override
    public void draw() {
        System.out.println("打印一个");
    }
}

我们在多态里面看到了这个代码,发现class shape里面的draw方法没有用,我们是不是可以不实现这个方法,就把它声明一下,我们在Java中是可以做到的,这就是抽象方法。我们需要abstract来修饰(在访问修饰限定前后都一样)

abstract class Shape {
    public abstract void draw();
}

包含抽象方法的类是类

抽象类的特点
  1. 抽象类不能实例化
  2. 它生来就是要被继承的
  3. 抽象类里面可以存在普通成员和方法
  4. 一个普通类继承了抽象类,必须重写所有的抽象方法
  5. 但是仍然可以发生向上转型
  6. 一个抽象类A继承了抽象类B,那么这个抽象类B的抽象方法
  7. 要是这个A才被抽象类继承,抽象类要重写A和B中所有的抽象方法
  8. 抽象类不能被final修饰,也就是抽象方法也不能

抽象类不能实例化

一个普通类继承了抽象类,必须重写所有的抽象方法

说到这里,抽象类还有一些很古怪的特点,我们一起来看看吧.要是一个抽象类继承了一个抽象类会怎们样?

不会发生报错

abstract class Shape {
    abstract public void draw();
}

abstract class A extends Shape {
     public abstract void func();
}

不过要是一个抽象类A继承了抽象类B,那么这个抽象类B的抽象方法,要是这个A才被抽象类继承,抽象类要重写A和B中所有的抽象方法

接口

接口有是比抽象类还要抽象的知识,我们来看看吧

abstract class A {
    abstract public void a();
    abstract public void b();
    abstract public void c();
}

要是一个类都是抽象方法,这个类我们可以定以成一个接口

接口的特点

接口使用interface修饰的,下面就是一个接口

interface IShape {
    
    public abstract void draw();
    default public void func() {
        
    }
}
  1. interface 修饰
  2. 接口当中的普通方法,不能有具体方法的实现,要是非要有,必须加一个default来修饰
  3. 可以存在成员变量,但是必须初始化
  4. 接口可以存在static修饰的方法
  5. 接口里面所有的方法都是public的,可以省略,抽象方法还可以继续省略abstract
  6. 不可以实例化,但是可以向上转型
  7. 类和接口之间的关系是通过implements实现
  8. 普通类必须重写接口所有的抽象方法,default修饰的不用,当然这种也可以重写
  9. 普通类重写接口的抽象方法,访问修饰限定符必须是 public
  10. 一个类可以通过extends继承一个类或者抽象类,但是implements实现多个接口,接口之间 使用逗号隔开.
  11. 接口与接口之间之间是extends关系,意味拓展,也要"父债子尝"

interface 修饰

类和接口之间的关系是通过implements实现

可以存在成员变量,但是必须初始化,默认是有public static final,可以省略

一个类可以通过extends继承一个类或者抽象类,但是implements实现多个接口,接口之间 使用逗号隔开

interface IA {
    void a();
}
interface IB {
    void b();
}
class C {
    
}
class D extends C implements IA,IB {
    @Override
    public void a() {

    }

    @Override
    public void b() {

    }
}

接口与接口之间之间是extends关系


@Override
public void a() {

}

@Override
public void b() {

}

}

[外链图片转存中...(img-aFUeR7hf-1648390837753)]





>接口与接口之间之间是extends关系



[外链图片转存中...(img-a50OoUYj-1648390837754)]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983950.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号