在定义一个最简单的scala对象作为起点,进行继承方面的记录:
class Person(val firstName:String, val lastName:String, val age:Int)
{
def toString = "[Person: firstName="+firstName+" lastName="+lastName+
" age="+age+"]"
}
注意:虽然在类的代码中你没有看见显示的age变量,这些都是scala的编译器决定的(下面的调用是可以实现的)
val p = new Person("Jennifer", "Aloi", 28)
println("p.age:"+p.age);
作为一个人,总会有些要做的事,所以可以创建子类的定义:
class Person(val firstName:String, val lastName:String, val age:Int)
{
override def toString = "[Person: firstName="+firstName+" lastName="+lastName+
" age="+age+"]"
def doSomething; // note the semicolon, which is still optional
// but stylistically I like having it here
}
class Student(firstName:String, lastName:String, age:Int) ///在类的定义的时候就完成了构造函数
extends Person(firstName, lastName, age)</span>
{
def doSomething =
{
System.out.println("I'm studying hard, Ma, I swear! (Pass the beer, guys!)")
}
}
此外,函数也可以当作一种类型(对象和函数 作用与前面说匿名函数的时候差不多):
// This is Scala
class Person(val firstName:String, val lastName:String, val age:Int)
{
var doSomething : (Person) => Unit = //注意
(p:Person) => System.out.println("I'm " + p + " and I don't do anything yet!");
def work() =
doSomething(this)
override def toString = "[Person: firstName="+firstName+" lastName="+lastName+
" age="+age+"]"
}
object App
{
def main(args : Array[String]) =
{
val bindi = new Person("Tabinda", "Khan", 38)
System.out.println(bindi)
bindi.work()
bindi.doSomething =
(p:Person) => System.out.println("I edit textbooks")
bindi.work()
bindi.doSomething =
(p:Person) => System.out.println("I write HTML books")
bindi.work()
}
}
// This is Scala
abstract class Person(val firstName:String, val lastName:String, val age:Int)
{
def doSomething
def weight : Int
override def toString = "[Person: firstName="+firstName+" lastName="+lastName+
" age="+age+"]"
}
class Student(firstName:String, lastName:String, age:Int, val subject:String)
extends Person(firstName, lastName, age)
{
def weight : Int =
age // students are notoriously skinny
def doSomething =
{
System.out.println("I'm studying hard, Ma, I swear! (Pass the beer, guys!)")
}
}
class Employee(firstName:String, lastName:String, age:Int)
extends Person(firstName, lastName, age)
{
val weight : Int = age * 4 // Employees are not skinny at all
def doSomething =
{
System.out.println("I'm working hard, hon, I swear! (Pass the beer, guys!)")
}
}
从 @Override 到 override (不得不说的就是IED了,唉)
// This is Scala
class Student(firstName:String, lastName:String, age:Int, val subject:String)
extends Person(firstName, lastName, age)
{
def weight : Int =
age // students are notoriously skinny
def doSomething =
{
System.out.println("I'm studying hard, Ma, I swear! (Pass the beer, guys!)")
}
override def toString = "[Student: firstName="+firstName+
" lastName="+lastName+" age="+age+
" subject="+subject+"]"
}
同样,在scala的 final的用法与Java中完全一样,当然了,在编程的时候,val生成的就是final的属性
scala和Java的混合是,在scala 中的Java对象同样支持Any类型的指派(Java中的Object类)代码:
package scaj;
public class JavaPerson {
public JavaPerson(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String value) {
this.firstName = value;
}
public String getLastName() {
return this.lastName;
}
public void setLastName(String value) {
this.lastName = value;
}
public int getAge() {
return this.age;
}
public void setAge(int value) {
this.age = value;
}
public String toString() {
return "[Person: firstName" + firstName + " lastName:" + lastName
+ " age:" + age + " ]";
}
private String firstName;
private String lastName;
private int age;
}
package scaj
class ScalaJavaPerson(firstName: String, lastName: String, age: Int)
extends JavaPerson(firstName, lastName, age) {
val weight: Int = age * 2 // Who knows what Scala/Java people weigh?
override def toString = "[SJPerson: firstName=" + firstName +
" lastName=" + lastName + " age=" + age + "]"
}
object xx extends Application {
val richard = new ScalaJavaPerson("Richard", "Campbell", 45)
System.out.println(richard)
val host: Any = richard
System.out.println(host)
println("**********************")
val carl = new JavaPerson("Carl", "Franklin", 35)
System.out.println(carl)
val host2: Any = carl
System.out.println(host2)
}