美文网首页
【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学习】抽象类|接口|抽象类和接口的区别|提供代码在线运

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