package exp {
    object Main {
        def main(args: Array[String]): Unit = {
             B[String].say("hello"); //B[String]后的括号可以省略,编译器知道这不是要用类型B而是要调用B.apply[String]
             A().say("hello"); //括号省略了不知道是要用object的类型A还是A.apply()
        }
    }
    class A
    {
        def say(x:String) = println(x);
    }
    object A
    {
        def apply():A = new A;
    }
    class B[T]
    {
        def say(x:T) = println(x);
    }
    object B
    {
        def apply[T]():B[T] = new B[T];
    }
}

  

trait Stu {
        val age: Int;
        lazy val x = 100 / age;
    }

    abstract class S {
        val name: String;
        def say = println(s"hello $name");
    }

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

            abstract class Sa extends S with Stu;
            val y = new Sa() { val name = "Fred"; val age = 28 };
            // val y = new S(){val name="wengmj";val age=28} with Stu;  直接这么写就不行;  怎样直接构造一个继承抽象类和特质的匿名具体类
            y.say
            println(y.x);

        }
    }

 scala 的内部类

class Outer
    {
        class Inner;
    }
    object Main {
        def main(args: Array[String]): Unit = {
            val o = new Outer;
            val i = new o.Inner;
            println(i.isInstanceOf[Outer#Inner]);
            
        }
    }

 java 的内部类

public class Ppp {

    public static void main(String[] args) {
        Outer a = new Outer();
        Outer.Inner b = a.new Inner(); ////Outer.Inner i = new Outer().new Inner();
        System.out.print(b instanceof Outer.Inner);
    }
}

class Outer
{
    class Inner{}  
}

  

posted on 2014-04-28 18:40  scala  阅读(362)  评论(0编辑  收藏  举报