/* * Copyright (C) 2007-2008 Artima, Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Automatically generated Scala interpreter transcript from: * * Programming in Scala (First Edition, Version 6) * by Martin Odersky, Lex Spoon, Bill Venners * * http://booksites.artima.com/programming_in_scala */ scala> abstract class Element { def contents: Array[String] val height = contents.length val width = if (height == 0) 0 else contents(0).length } defined class Element scala> class ArrayElement(conts: Array[String]) extends Element { def contents: Array[String] = conts } defined class ArrayElement scala> val ae = new ArrayElement(Array("hello", "world")) ae: ArrayElement = ArrayElement@d70e2c scala> ae.width res0: Int = 5 scala> abstract class Element { def demo() { println("Element's implementation invoked") } } class ArrayElement extends Element { override def demo() { println("ArrayElement's implementation invoked") } } class LineElement extends ArrayElement { override def demo() { println("LineElement's implementation invoked") } } // UniformElement inherits Element's demo class UniformElement extends Element defined class Element defined class ArrayElement defined class LineElement defined class UniformElement scala> def invokeDemo(e: Element) { e.demo() } invokeDemo: (Element)Unit scala> invokeDemo(new ArrayElement) ArrayElement's implementation invoked scala> invokeDemo(new LineElement) LineElement's implementation invoked scala> invokeDemo(new UniformElement) Element's implementation invoked scala> class ArrayElement extends Element { final override def demo() { println("ArrayElement's implementation invoked") } } defined class ArrayElement scala> class LineElement extends ArrayElement { override def demo() { println("LineElement's implementation invoked") } } :7: error: error overriding method demo in class ArrayElement of type ()Unit; method demo cannot override final member override def demo() { ^ scala> final class ArrayElement extends Element { override def demo() { println("ArrayElement's implementation invoked") } } defined class ArrayElement scala> class LineElement extends ArrayElement { override def demo() { println("LineElement's implementation invoked") } } :6: error: illegal inheritance from final class ArrayElement class LineElement extends ArrayElement { ^ scala> Array(1, 2, 3) zip Array("a", "b") res4: Array[(Int, java.lang.String)] = Array((1,a), (2,b))