前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java——抽象类和接口有什么区别

java——抽象类和接口有什么区别

作者头像
小雨的分享社区
发布2022-10-26 14:46:57
2710
发布2022-10-26 14:46:57
举报
文章被收录于专栏:小雨的CSDN

抽象类

在运行时多态/动态绑定中通常会有些类中的方法没有具体的实现,而是在在被子类继承和重写之后才会安排具体的执行方法

下面的代码就是以上所提到的情况:

代码语言:javascript
复制
class Shape {
    public void draw() {

    }
}
class Cycle extends Shape {
    @Override
    public void draw() {
        System.out.println("○");
    }
}
class Rect extends Shape {
    @Override
    public void draw() {
        System.out.println("□");
        }
}
class Flower extends Shape {
    @Override
    public void draw() {
        System.out.println("♣");
    }
}

public class TestDemo1114_1 {
    public static void main(String[] args) {
        Shape shape1 = new Flower();
        Shape shape2 = new Cycle();
        Shape shape3 = new Rect();
        drawShape(shape1);
        drawShape(shape2);
        drawShape(shape3);
    }

    // 打印单个图形
    public static void drawShape(Shape shape) {
        shape.draw();
    }
}

在刚才的打印图形例子中, 我们发现, 父类 Shape 中的 draw 方法好像并没有什么实际工作, 主要的绘制图形都是由Shape 的各种子类的 draw 方法来完成的. 像这种没有实际工作的方法, 我们可以把它设计成一个 抽象方法(abstractmethod), 包含抽象方法的类我们称为 抽象类(abstract class)

代码语言:javascript
复制
abstract class Shape {
	abstract public void draw();
}
注意事项
  • 1.抽象方法一定包含再抽象类中
  • 2.抽象类不能被 实例化
  • 3.抽象类主要就是用来被继承的
  • 4.如果一个类继承了这个抽象类,这个类必须重写抽象类中的抽象方法
  • 5.当抽象类A继承抽象类B,抽象类A可以不重写B中的方法,但是一旦抽象类A要是在被C继承继承,那么就一定要在C中重写这个抽象方法
  • 6.抽象类或者抽象方法一定不能被final修饰的

接口

接口是抽象类的更进一步. 抽象类中还可以包含非抽象方法, 和字段. 而接口中包含的方法都是抽象方法, 字段只能包含 静态常量

以下代码是使用接口的:

代码语言:javascript
复制
interface IShape {
 	void draw();
}
class Cycle implements IShape {
	@Override
	public void draw() {
	System.out.println("○");	
}

public class Test {
	public static void main(String[] args) {
	IShape shape = new Rect();
	shape.draw();
	}
}
注意事项
  • 1.接口中的方法都是抽象方法 ,因此可以省略 abstract
  • 2.其实可以有具体实现的方法(再jdk1,8加入的),方法前面加上default:(一般情况不用) default public void func(){}
  • 3.接口中定义的成员变量默认为常量 ,需要初始化
  • 4.接口中的成员变量,默认为public static final
  • 接口中的成员方法默认为: public abstract
  • 5.接口是不可以用来实例化
  • 6.接口和类之间的关系为implements
  • 7.解决java中的单继承问题,可以实现多个接口
  • 8.只要这个类实现了该接口,那么你就可以进行向上转型
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 抽象类
  • 接口
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档