Java基础vsPython基础7-抽象类与接口

Java基础vsPython基础7-抽象类与接口
jiutian99
jiutian99
54
阅读
0
评论
2021年10月09日23:41:02 0 54

一、什么是抽象类

如果一个类(class)定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用abstract修饰。因为无法执行抽象方法,因此这个类也必须申明为抽象类(abstract class)。使用abstract修饰的类就是抽象类。

注意:抽象类无法实例化。

abstract class Person { public abstract void hello();}

如上所述,如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆写它,那么,可以把父类的方法声明为抽象方法,把一个方法声明为abstract,表示它是一个抽象方法,本身没有实现任何方法语句。因为这个抽象方法本身是无法执行的,所以,Person类也无法被实例化。编译器会告诉我们,无法编译Person类,因为它包含抽象方法。因此必须把Person类本身也声明为abstract,才能正确编译它。

Person p = new Person(); // 编译错误

无法实例化的抽象类有什么用?因为抽象类本身被设计成只能用于被继承,因此,抽象类可以强行要求子类实现其定义的抽象方法,否则编译会报错。因此,抽象方法实际上相当于定义了“规范”。如Person类定义了抽象方法hello(),那么在实现子类Student的时候,就必须覆写hello()方法:

public class Main {

    public static void main(String[] args) {

        Person p = new Student();

        p.hello();

    }

}

abstract class Person {

    public abstract void hello();

}

class Student extends Person {

    public void hello() {

        System.out.println("Hello,Student!");

    }

}

Java结果如下:

二、接口

在抽象类中,抽象方法本质上是在定义接口规范:即规定高层类的接口,从而保证所有子类都有相同的接口实现,这样,多态就能发挥出威力。如果一个抽象类没有字段,所有方法全部都是抽象方法:

abstract class Person {

    public abstract void hello();

    public abstract void bye();

}

就可以把该抽象类改写为接口:interface。在Java中,可以使用interface关键字声明一个接口:

interface Person {

    void hello();

    void bye();

}

所谓interface,就是比抽象类还要抽象的纯抽象接口,因为它连字段都不能有。因为接口定义的所有方法默认都是public abstract的,所以这两个修饰符不需要写出来(写不写效果都一样)。当一个class去具体实现一个接口interface时,需要使用implements关键字,举个栗子:

public class java2 {

    public static void main(String[] args) {

        Person p = new Student("Li Lei");

        p.hello();

        p.bye();

    }

}

interface Person {

    void hello();

    void bye();

}

class Student implements Person {

    private String name;

    public Student(String name) {

        this.name = name;

    }

    @Override

    public void hello() {

        System.out.println(this.name + " hello");

    }

    @Override

    public void bye() {

        System.out.println(this.name + " bye");

    }

}

Java结果如下:

三、Python抽象类、接口

首先,大家必须明确的一点是:Python中没有抽象类、接口类型,Python是动态语言,定义接口只是人为规定,在编程过程中的自我约束!在其他的语言里,比如Java,继承类没有重写接口方法是会报错的,而在python则不会,就是因为Python没有这个类型。


余额充值 点赞(0)
weinxin
账号+金额发此微信
充值后请把会员账号/用户名+充值金额发送到此微信:tourism52
历史上的今天
01月
18
php, dire,tory ,函数 菜鸟教程

PHP Directory 函数

PHP Directory 简介Directory 函数允许您获得关于目录及其内容的信息。安装PHP Directory 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。...
php,是什么 菜鸟教程

PHP 是什么?

PHP 是什么?PHP(“PHP: HypertextPreprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤...
RSS,item,元素,RSSitem,元素,每个,item,可定义,RSS, 菜鸟教程

RSS <item> 元素

RSSitem元素 每个 item 元素可定义 RSS feed 中的一篇文章或 story。 item 元素 请看下面的 RSS 文档: ?xml version=1.0 enc...
foreach 菜鸟教程

foreach

foreach(PHP 4, PHP 5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的...
多层,嵌套,css, 3d,动画,技术,详解 菜鸟教程

多层嵌套的CSS 3D动画技术详解

CSS动画是当前一种非常火爆的技术,我说的并不是一些简单的颜色变换或长短属性变换,我说的是3D变换技术;纯CSS实现的翻滚旋转立方体就是最典型的例子。网上能找到很多关于CSS动画的...
浅谈,分库,分表,那些,事儿 菜鸟教程

浅谈分库分表那些事儿

本文适合:需要从单库单表改造为多库多表的新手。本文主要阐述在分库分表改造过程中需要考虑的因素以及对应的解法,还有踩过的那些坑。一  前言我们既然要做分库分表,那总要有个做...

Comment list 共有 0 条评论

暂无评论