scala学习笔记04-语法杂记:构造器、class文件、伴生对象、apply方法、继承、抽象类、Trait特征、"_" 的使用

scala中的class文件:

在class文件中创建的main方法是一个普通的方法
需要在object创建main方法才能run
使用val定义变量和不能用_赋值
private 修饰的参数在编译后自动生成private的 get和set方法
public 修饰的属性编译后自动生成public的 get和set方法
val修饰的属性只会生成get方法
使用private[this]修饰的属性,在class文件中不会生成get和set方法

	private[this] var name:String = _ 
    //使用java风格的get和set方法
	import scala.beans.BeanProperty
	@BeanProperty var like:String=_

scala中的构造器&java中的构造方法

主构造器 构造方法 在类名后加上参数 创建在类名上面的为主构造器
在只有主构造器时,不能new无参构造方法
辅助构造器:当主构造器不能满足需求的时候
	class MyClass02(var name:String,var age:Int) {
		/**
			* 定义辅助构造器
			* 1.方法名为this
			* 2.第一行必须调用另一个构造器,不能存在环形关系
			*
		 */
		def this(name:String){
		  this(name,10) 
		}

		def this(){
		  this("baba",30)
		}

		def m01()={
		  println(name)
		}
	}
scala中没有静态属性和静态方法

scala中object编译后产生的都是静态方法和属性

为什么在class当中创建的main函数无法运行:

因为main函数在JVM当中运行时必须是静态的才行

对象-伴生对象

如果有一个class,还有一个与class同名的object,那么就称这个object是class的伴生对象,class是object的伴生类
伴生类和伴生对象必须放在同一个.scala文件之中
伴生类和伴生对象,最大的特点就在于,互相可以访问private属性
伴生对象可以调用伴生类中的私有属性

对象-apply方法

object中非常重要的一个特殊方法,通过在伴生对象中实现apply方法,并在其中实现构造伴生类的对象功能
而创建伴生类的对象时,通常不会使用new Class的方式,而是使用Class()的方式,隐式地调用伴生对象的apply方法。这样会让对象创建更加简洁
apply方法可以重写
可以让使用者直接使用对象,但在apply方法中,是需要去实例化类的

	def apply(): myObject_  Class01 = new myObject_Class01()
	def apply(hobby:String): myObject_Class01 = new myObject_Class01(hobby:String)
继承

继承采用的关键字与java相同
继承父类的属性可以进行修改
final修饰的类不能被继承
scala对方法的重写需要加上override关键字
如果父类属性被private修饰,则继承子类可以创建重名属性

抽象类abstract

没有方法体的方法为抽象方法
子类继承抽象类,那么必须重写抽象方法,除非子类也是抽象类

Scala Trait(特征) 相当于 Java 的接口,实际上它比接口还功能强大。

可以有抽象方法和普通方法:
//抽象方法
def method01()
//普通方法
def method02(): Unit = {println(“00000000000000000”)}
使用extends将trait和class关联,并可实现多继承,当使用多个trait继承时使用with进行连接
如果两个trait当中有同名的抽象方法的话,因为抽象方法没能方法体,我们是不用管到底用的是那一个trait当中的方法
但是,如果两个trait当中有一样的普通方法的话,那怎么怎么处理?
在启动的时候,会报错,因为他不知道到底调用哪一个方法,怎么处理?
如果多个Trait当中有同名的方法的话,在子类当中必须进行重写

下划线:_ 的使用:
1.导包的时候可以使用相当于 "*"
2.在遍历的时候可以使用	arr03.foreach(println(_))
3.将函数复制给变量时,转换高阶函数时 
	var a: String => Unit = method01 _ //为一个函数变量
4.如果参数在函数体中只使用一次,可以直接使用_代替
  当参数有多个时,使用_时,第一次出现_时表示第一个参数,第二次出现_时表示第二个参数
	var x=1 to 10
	x.foreach((data:Int)=>println(data))
	x.foreach((data)=>println(data))
	x.foreach(data=>println(data))
	x.foreach(println(_))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值