Scala 继承与多态与trait

1)scala中,让子类继承父类,与java一样,使用extends关键字
		2)继承就代表,子类可以从父类继承父类的field和method,然后子类可以在自己内部放入父类所没有,子类特有的filed和method,使用继承可以复用代码
		3)子类可以覆盖父类的filed和method,但是要注意的是final关键字,代表field和method无法覆盖
		4)子类中的方法要覆盖父类中的方法,必须写override
		5)子类中的属性val要覆盖父类中的属性,必须写override
		6)父类中的变量不可以覆盖
		4)定义抽象类
			abstract class Animal { //定义一个抽象类,用于继承
			  var age :Int = 2
			  val weight:Double = 35

			  //抽象方法,没有具体的实现
			  def color()

			  //非抽象方法,有具体的实现
			  def eat()={
				println("吃食物")
			  }
			  //使用了final关键字,表示不能重写, override
			  final def action():Unit = {
				println ("奔跑")
			  }
			}
			/**
			  * 如果想实现父类的方法:CTRL+I
			  * 如果想重写父类的方法:CTRL+O
			  */
			class Monkey extends Animal{
			   //重写父类字段
			  override var age:Int = 15
			  override val weight: Double = 15

			  //抽象方法,没有实现(重写父类抽象的方法,可以选择性的使用override)
			  override def color(): Unit = {
				println("棕色")
			  }
			  //非抽象方法有实现了,(重写父类非抽象方法,必须使用override)
			  override def eat(): Unit = {
				println("吃桃子")
			  }
			}
			object Monkey{
			  def main(args: Array[String]): Unit = {
				val monkey = new Monkey
				
				println(monkey.weight)
				println(monkey.color())
				println(monkey.eat())
				println(monkey.action())
			  }
			}
(*)多态
		1)什么是多态:目的是为了让代码更加,降低耦合
			有继承或实现特质(接口)
			父类引用指向子类对象或接口指向实现类
			方法需要重写
			
			abstract class Element {
			  def demo(): Unit ={
				println("Element's invoked")
			  }
			}
			class ArrayElement extends Element{
			  override def demo(): Unit = {
				println("ArrayElement's invoked")
			  }
			}
			class LineElement extends ArrayElement{
			  override def demo(): Unit = {
				println("LineElement's invoked")
			  }
			}
			class  UniforElement extends  Element //没有重写父类方法

			object ElementTest{
			  //参数类型为祖宗类,任何子类实例都可以传递(基类)
			  def invokedDemo(e:Element): Unit ={
				e.demo()  //多态,在运行时调用相应子类方法
			  }
			  def main(args: Array[String]): Unit = {
				invokedDemo(new ArrayElement) //父类引用指向子类对象
				invokedDemo(new LineElement) //祖父类引用指向孙类对象
				invokedDemo(new UniforElement) //没有重写父类方法,所以调用的时候输出祖宗类demo
			  }
			}		
		}
	(*)trait:特质
		1)scala 特征:相当于Java中的接口,实际上他比接口功能强大
		2)与接口不同的是:是可以定义属性和方法的实现
		3)一般情况下scala的类只能被继承单一父类,但是如果是trait的话可以实现多个继承,从结果上来看就是实现了多继承
		4)trait定义的方式与类类似,但是它使用的关键字是trait

 

你可能感兴趣的:(Scala,HaDoop学习历程)