Java中类、抽象类、接口的联系与区别

类、抽象类、接口是Java中相似而又很不同的知识点。在此记录一下初学者的我对于三者的认识。

简单介绍

(class)可以理解为将某一类事物的共同属性或行为进行归纳抽象。比如学生、医生都是特定的类,他们是可以实例化成对象的。

抽象类(abstract class)可以理解为类的更加抽象化。比如我们想要从人与猫之间去找共同属性,可以借鉴动物这一抽象类!抽象方法必须存在于抽象类中,但抽象类不一定存在抽象方法(没有抽象方法的抽象类比较少见!);也就是说如果你要写一个抽象方法,那它所在的类也必须定义成抽象的类。为什么要定义抽象方法呢?因为当你做一件事不确定怎么做的时候(实现方式未知)就可以使用抽象方法,比如我们定义动物这一抽象类时无法将吃饭这一方法完全实现,因为动物中的人和猫吃饭方式与要吃的东西不同。

接口(interface)可以理解为将抽象又向前迈进了一步!在我们的印象中,USB、OTG等接口是用于设备间连接的,可插拔的桥梁。Java中的接口与之类似,它只是给我们的类添加附属功能,并且是"可插拔的";另外,我们也知道某一确定的接口规格都是相同的,且连接的设备的具体功能不同。因此,Java接口中必须全是抽象方法(未实现的方法)和final常量!

语法说明

类中可以(但不必须)有属性和方法,比如说人这一个类:有两个眼睛,会学习!

类只能继承一个父类,但可以有多个接口实现。

一般格式

[修饰符] class <类名> [extends 父类名] [implements 接口列表]{ }

  • 修饰符:public、abstract、final

代码实现

class People{
  int eyesCount = 2;
  void study(){
    Syste.out.println("我会学习!");
  }
}

抽象类

抽象类中可以(但不必须)有普通的方法,抽象方法,内部变量。抽象类不能实例化对象,只能被继承!继承它的子类如果要成为普通类(能实例化对象)的话,必须全部实现其父类抽象类的全部抽象方法,否则子类也是抽象类!

abstract class People{
    int eyesCount = 2;
    abstract void study();
    void eat(){
      
    }
}

接口

接口中只允许存在public的静态常量、抽象方法!其修饰限定符可以省略,编译器会为我们自动补全!

interface Test{
    int a = 1;
    //等价于public static final int a = 1;
    void eat();
    //等价于public abstract void eat();
}

举例介绍

小明(对象)是一个小学生(类),他的小学数学很好(属性)。他的邻居大明(又一个对象)是一个大学生(又一个类),就读电子学专业,高数已挂,他们两个总是在一起玩王者荣耀。大明利用课余时间把驾照(额外技能)考了下来。他的一个同学大华很喜欢计算机编程,自学了Java(又一个额外技能!),喜欢一个人玩守望先锋娱乐。三个人都睡觉很晚(共同属性)!

代码实现

package io.github.xiaozheng243.Test;

//当存在不知如何实现的的方法时使用抽象对象,但也有些方法知道如何实现
//不同阶段的学生学的东西不同,所以使用抽象方法,但都需要睡觉
abstract class Student {
    abstract void study();

    void sleep() {
        System.out.println("我需要睡觉!");
    }

    Student() {
        study();
        sleep();
    }
}

// 接口中必须全是抽象方法和final static常量,且是public的,但public和abstract可以省略,编译器会自动添加
// 开车这个技能并不是每个大学生都会,因此,额外的技能在面对一个群体中的某一个对象时是"可插拔的"
// 我们不需要知道他们是如何开的车,只需要知道他会开车就行了,因此开车不需要在接口中实现
interface drivingLicense {
    // 驾照数量,一般只有一个,是常量!
    public static final int num = 1;

    public abstract void drive();
}

interface Program {
    public abstract void javaProgram();
}

// 不确定他玩的游戏类型
interface Game {
    public abstract void playGame();
}

// 类可以继承父类的同时实现接口
class Pupil extends Student implements Game {
    void study() {
        System.out.println("我会小学数学!");
    }

    public void playGame() {
        System.out.println("我还会玩王者荣耀!");
    }

    Pupil() {
        super();
        playGame();
    }
}

class CollegeStudent1 extends Pupil implements drivingLicense {
    void study() {
        System.out.println("高数已挂!");
    }

    public void drive() {
        System.out.println("我还会开小汽车!");
    }

    CollegeStudent1() {
        super();
        drive();
    }
}

class CollegeStudent2 extends Student implements Program, Game {
    void study() {
        System.out.println("高数很简单嘛!");
    }

    public void playGame() {
        System.out.println("我还会玩守望先锋!");
    }

    public void javaProgram() {
        System.out.println("我还会java编程!");
    }

    CollegeStudent2() {
        super();
        javaProgram();
        playGame();
    }
}

public class Test {

    public static void main(String[] args) {
        // Pupil xiaoMing = new Pupil();
        new Pupil();
        System.out.println();
        // CollegeStudent1 daMing = new CollegeStudent1();
        new CollegeStudent1();
        System.out.println();
        // CollegeStudent2 daHua = new CollegeStudent2();
        new CollegeStudent2();
    }

}

本人小白一个,欢迎访问我的个人博客,同时也欢迎来相互交流学习!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容