zoukankan      html  css  js  c++  java
  • 【scala】继承

    Scala中的继承与Java有着显著的不同。

    抽象类abstract class

    abstract class Car{//抽象类
        val carBrand:String;//抽象字段,一个没有被初始化的字段
        def info();//抽象方法
        def greeting(){println("Welcome to my car")}//非抽象方法
    }
    

    Scala的抽象类同Java一样不能被实例化,但是可以被继承,可以包含非抽象方法。

    定义抽象字段的时候,只要没给出初始化值,就表示为一个抽象字段,但是抽象字段必须要声明类型。

    定义抽象方法的时候不需要使用abstract关键字,直接定义,不用写方法体。

    class BMWCar extends Car{
        override val carBrand: String = "BMW";//重写抽象字段,需使用override关键字
        //重写抽象方法,不需要使用override关键字
        def info(){println("The car is "+carBrand)}
        //重写非抽象方法的时候,需要使用override
        override def greeting(): Unit = {println("Welcome to my BMWCar")}
        
    }
    

    我们在继承抽象类的时候使用extends来继承

    重写抽象字段和非抽象方法的时候需要使用override关键字来声明。

    重写抽象方法的时候不需要使用override关键字,但是写上编译器有也不会报错。

    特质trait

    Scala同Java相同并不支持多重继承,Java通过接口来达到多重继承效果,Scala则通过特质来实现。

    Scala中的特质类似于Java中的接口,但是又不同于接口。

    特质可以实现多继承机制,类似于接口。

    但是特质又可以包含非抽象方法,相当于抽象类,接口则不能。

    特质相当于实现了多继承机制的抽象类。

    trait Car{//特质
        val carBrand:String;//抽象字段,一个没有被初始化的字段
        def info();//抽象方法,不使用abstract
        def greeting(){println("Welcome to my car")}//非抽象方法
    }
    

    我们注意到,我们使用特质的时候用关键字trait。

    特质中可以包含非抽象方法。

    trait CarId{//我们再次定义一个特质
        var id : Int;
        def currentId();
    }
    class BMWCar extends Car with CarId { 
        //重写特质Car中的抽象字段
        override val carBrand: String = "BMW";
        //重写特质CarId中的抽象字段
        override var id: Int = 10000;
        //重写特质Car中抽象方法
        def info(){println("The car is "+carBrand)}
        //重写特质Car中非抽象方法的时候
        override def greeting(): Unit = {println("Welcome to my BMWCar")}
        //重写特质CarId中的抽象方法
        override def currentId() = println("My BWMCar id is "+id);
    }
    

    在继承多个特质的时候我们使用extends来继承第一个特质,以后每多加一个特质都要使用with来添加。

    特质的其他用法同抽象类相同。 

  • 相关阅读:
    数据库学习之四--Join, Left Join, Right Join, Full Join对比
    数据库学习之三--Select查询及运算符
    数据库学习之二--SQL语句以及数据类型
    随身笔记 Python中__init__和self的意义和作用
    爬虫Request Header请求头各参数含义
    爬虫中的Header请求头 在浏览器中通过F12和F5分析
    爬虫中的User-Agent 使用与作用
    Maven build 命令介绍(转)
    Linux 确定tomcat的运行状态命令
    Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.解决办法
  • 原文地址:https://www.cnblogs.com/zzhangyuhang/p/8940463.html
Copyright © 2011-2022 走看看