scala之抽象类-abstract、【final、private】等关键字

scala之抽象类-abstract关键字、final、private关键字

1 Java之抽象类

abstarct class A{}

在java中,抽象类中必须有抽象的方法,抽象类可以被继承,但是继承的同时必须重写所有的抽象方法。

abstract class A{
  //必须要有抽象方法
  public abstract String say(String name){
    return  name;
  }
}

2 scala抽象类

abstarct class B{}

在scala中,抽象类有几个特点

1、抽象类是不能被实例化的,如果声明一个抽象类的实例,必须重写所有的抽象属性和抽象方法

2、abstract只能修饰class,不能修饰def

3、一旦一个类中有抽象的方法或者属性,那么这个类必须用abstract进行修饰。如def a、var name:String

4、scala抽象类中可以有已经被实现的普通方法

5、抽象类中的抽象属性和方法不能使用private、final关键字进行修饰,否则与事实相违背

  • private关键字代表私有的,只能在本类中被访问,可以修饰属性、方法
  • final可以修饰类、属性、方法
  • 当修饰类、这个类不能被继承
  • 当修饰方法、这个方法不能被重写
  • 当修饰属性,这个属性不能被修改和重写
abstract class B{
  //这就是抽象类的抽象的属性,还没被初始化,如果继承该抽象类,必须初始化这2个属性
  var name:String
  var id:Int 
    
  //这就代表抽象方法,没有方法体的方法就是抽象方法,
   def say()
   //这就是一个普通的方法,也可以被继承,重写,重载
   def say(name:String):Unit = {sout....}
}

3 小试牛刀

package com.shufang.facetoobject

object AbstractClassDemo {

}

// 在scala中抽象类中可以没有抽象方法
abstract class AB {
  //在抽象类中,抽象方法和抽象属性都不能使用private和protected关键字进行修饰,与初衷相违背
  var name: String
  var age: Int

  def say(): Unit = {
    println(".sout")
  }

  //抽象方法
  def say1()
}

class ABS extends AB {
  override var name: String = _
  override var age: Int = _

  //子类继承抽象类,重写抽象方法,可以省略override关键字
  def say1(): Unit = super.say()
}


object Test000001 {
  def main(args: Array[String]): Unit = {

    //创建一个抽象类的实例,实现所有的抽象
    val ab: AB = new AB {
      override var name: String = _
      override var age: Int = _
      override def say1(): Unit = ???
    }

    val abs = new ABS
    abs.say1()

  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值