【Java学习】抽象类|接口|抽象类和接口的区别|提供代码在线运行

心得感悟

今天讲的内容真的很少了,但我还是花了很多时间才能理解。我一开始觉得抽象类能做到的,普通类也能做的,并不能理解抽象类的优点。后面多方查阅资料还有问同学,才明白原来抽象类如此便捷好用。了解了抽象类和接口的区别后,才发现原来它们这么相似,只要弄懂其中一个,肯定也能弄懂另一个。有的时候一个例子看不懂没关系,再多找点例子,总能看懂的。


1. 目的

  • 一、掌握抽象类的概念及用法
  • 二、掌握接口的概念及用法

2. 内容简概

  • 一、抽象类的定义及用法
  • 二、接口的定义及用法
  • 三、抽象类和接口的区别

3. 具体内容

  • 一、抽象类的定义及用法

1.概念:
抽象类是用来管理一些抽象内容的类。简单的说,使用了关键词abstract声明的类叫作“抽象类”。其中用abstract修饰的方法叫做“抽象方法”。抽象方法与一般方法的不同之处在于,抽象方法只对方法作出声明,但并没有具体的实现内容。

2. 定义规则:
(1) 抽象类和抽象方法必须用abstact关键字来修饰。
(2)抽象方法定义时,只需要声明,不需要实现
(3)含抽象方法的类必须被声明为抽象类
(4)抽象类的子类必须实现所有的抽象方法后,才能被实例化,若不想实现抽象方法,就定义它为抽象类,否则会报错。
(5)不能被实例化。如下面这个例子,运行时会报错,抽象方法是不能被实例化的。

public class MyClass {
    public static void main(String[] args){
          Person xw = new Person();//实例化
    }
}
abstract class Person{
      String name;
      public Person(String name){
            this.name = name;
            System.out.println(this.name);
      public abstract void work();
}

如果非要用,只能通过使用匿名类来调用抽象类,且这样的调用只能使用一次。即将上面代码中的Person xw = new Person();改为如下代码,必须使用抽象类中的抽象方法。

        Person xw = new Person(name:"小王"){
              @Override
              public void work() {};
        }

3. 什么时候用到抽象类?
我举一个实际的例子,一个几何图形的类,它们都有一些相同的属性如:长、宽,都有周长、面积等方法,但是不同的图形有不同的计算周长、面积的公式,也就是说,同种方法有不同的实现代码,这时就需要用到抽象类和抽象方法。且抽象类和继承紧密相关,

4. 抽象类和抽象方法的具体用法
(1)首先,我们创建一个管理图形Shape的抽象类

public abstract class Shape
{
    public int width;    //几何图形的长
    public int height;    //几何图形的宽
    public Shape(int width,int height)
    {
        this.width = width;
        this.height = height;
    }
    public abstract double area();    //定义抽象方法,计算面积
}

(2)然后定义一个正方形类,该类继承Shape

public class Square extends Shape
{
    public Square(int width,int height)
    {
        super(width,height);
    }
    //重写父类中的抽象方法,实现计算正方形面积的功能
    @Override
    public double area()
    {
        return width*height;
    }
}

(3)再定义一个三角形类,该类同样继承Shape

public class Triangle extends Shape
{
    public Triangle(int width,int height)
    {
        super(width, height);
    }
    //重写父类中的抽象方法,实现计算三角形面积的功能
    @Override
    public double area()
    {
        return 0.5*width*height;
    }
}

(4) 最后创建一个测试类,分别创建正方形类和三角形类的对象,并调用各类中的 area() 方法,打印出不同形状的几何图形的面积。

public class ShapeTest
{
    public static void main(String[] args)
    {
        Square square = new Square(5,4);    //创建正方形类对象
        System.out.println("正方形的面积为:"+square.area());
        Triangle triangle = new Triangle(2,5);    //创建三角形类对象
        System.out.println("三角形的面积为:"+triangle.area());
    }
}

(5)运行结果如下:

正方形的面积为:20.0
三角形的面积为:5.0
  • 二、接口的定义及用法

1. 概念:
接口(interface)就是定义一套方法/规则,用于对象之间的通信。有点类似于房屋中介或者USB,就是用于连通双方,并且规定以什么样的形式连通。比如房屋中介会制定好双方的见面时间,要求收取中介费等。而USB会规定两样电器间只能传输文件或者只能查看信息等。同样的,我们可以规定接口的方法。

2. 定义规则:
(1)可以定义内部类
(2)不能定义变量
(3)不能定义代码块
(4)不能添加普通/对象/实例方法
(5)不能定义构造方法,只有抽象方法
(6)使用implements实现一个接口
(7)默认的变量都是static final 常量
(8)一个类可以实现多个接口,一个接口可以继承多个接口

3. 什么时候用到接口?
就我目前的理解中,接口是面向对象时会用到的。比如手机的操作界面,当用户点击屏幕时,就需要一个接口来连通点击事件和被点击的应用软件。再比如手机通过数据线传输文件或者查看信息,接口用来连接传输者和手机,相当于数据线。

4. 接口的具体用法
(1)就上一点中的例子展开分析。首先,我们声明一个USB接口,接口规定必须接口的两个对象必须实现read()和write()这两个方法。

interface USB{
    //public abstract
    void read();

    //public abstract
    void write();
}

(2)然后我们定义一个手机的类和电脑的类来实现这个USB接口,实现就是去用它。

class Computer implements USB{
      @Override
      public void read() {
          System.out.println("电脑正在通过USB功能读取数据");
      }
      @Override
      public void write() {
          System.out.println("电脑正在通过USB功能写入数据");
      }
}
class Phone implements USB{
      @Override
      public void read() {
          System.out.println("手机正在通过USB功能读取数据");
      }
      @Override
      public void write() {
          System.out.println("手机正在通过USB功能写入数据");
      }
}

(3)最后我们定义一个主类来看看运行效果

public class Test{
      public static void main(String[] args){
            Computer computer = new Computer();
            computer.read();
            computer.write();
            Phone phone = new Phone();
            phone.read();
            phone.write();
      }
}

(4)运行结果如下:

电脑正在通过USB功能读取数据
电脑正在通过USB功能写入数据
手机正在通过USB功能读取数据
手机正在通过USB功能写入数据
  • 三、抽象类和接口的区别

抽象类和接口里面都有抽象方法,不知道你会不会有一种感觉,虽然它们的关键字不同,但感觉它们两个很相似。如果你对此感到困惑或者容易混淆二者,可以点击以下网页查看讲解,我认为这个网页中的讲解还是很清晰明了的。

4. 亲手练一练

1. 俗话说实践出真知,纸上谈兵不如亲自刀枪上阵,可以在下面的在线代码运行界面自己运行一下,还可以改改代码,便于加深理解。

(1)抽象类的用法

(2)接口的用法

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

推荐阅读更多精彩内容

  • 今日任务: 1,能够独立使用抽象类 2,能够独立使用多态 3,能够独立使用接口 4,能够理解适配器设计模式 1. ...
    Villain丶Cc阅读 1,339评论 0 17
  • 一、抽象类 1、抽象类含义的概括: 当多个类出现相同功能时,但功能主体不同,这样可以向上抽取,抽取时只抽取功能定义...
    玉圣阅读 822评论 0 6
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,533评论 0 6
  • 最近天气有点回潮了,很烦,让人很不舒服,走到哪里都是湿湿的。屋子里太冷,外面的热空气进到屋子里就变成水珠,哎,真是...
    noora_阅读 520评论 0 3
  • 看过了本文,你又多了一个兼职,叫安慰师。 01 早早早,今天说一个安慰的话题。 女友心烦,闺蜜被甩了,朋友受伤欲哭...
    说话哥阅读 1,022评论 0 0