美文网首页
【Java学习】抽象类|接口|抽象类和接口的区别|提供代码在线运

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

作者: 榆野铃爱 | 来源:发表于2019-08-13 02:23 被阅读0次

心得感悟

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


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)接口的用法

相关文章

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

    心得感悟 今天讲的内容真的很少了,但我还是花了很多时间才能理解。我一开始觉得抽象类能做到的,普通类也能做的,并不能...

  • Java基础知识复习笔记(2)

    1. Java接口和抽象类的区别 语法上: 抽象类可以提供成员方法的实现细节,而接口中只能存在public abs...

  • java重要的知识点!

    接口和抽象类的区别是什么? Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于: 接口中所有的方法...

  • Java 接口知识点

    接口的特性 函数式接口 抽象类和接口区别 Lambda表达式 java常用接口

  • 5.5-全栈Java笔记:接口的定义和使用

    接口interface 接口的作用 为什么需要接口?接口和抽象类的区别? 接口就是比“抽象类”还“抽象”的“抽象类...

  • Java抽象类和接口类

    Java中接口和抽象类的区别是什么?什么时候用接口?什么时候用抽象类?抽象类和接口存在的意义是什么?能解决哪些编程...

  • 高端基础面试题

    接口和抽象类的区别 比较点抽象类接口默认方法抽象类可以有默认的方法实现java 8之前,接口中不存在方法的实现实现...

  • Spring的学习

    接口和抽象类? 抽象类和接口的区别在于使用动机。使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。1....

  • java中级开发必知

    (一)Java 1.接口和抽象类的区别 ①抽象类里可以有构造方法,而接口内不能有构造方法。 ②抽象类中可以有普通成...

  • 抽象类和接口的区别

    以下两篇文章介绍了接口和抽象类的概念接口概念抽象类概念 抽象类和接口的区别: 抽象类:需要使用abstract关键...

网友评论

      本文标题:【Java学习】抽象类|接口|抽象类和接口的区别|提供代码在线运

      本文链接:https://www.haomeiwen.com/subject/mjaujctx.html