diff --git a/README.md b/README.md index b61467e..6dfa811 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,8 @@ // *** transform emp to Employer_03 class (asInstanceOf) emp.asInstanceOf[Employer_03].sayHello() // downward transform ``` + - [SuperConstruct scala](./src/main/scala/ScalaBasic/SuperConstruct.scala), [SuperConstruct1 java](./src/main/scala/ScalaBasic/SuperConstruct1_java.java) - Scala/Java Super constructor examples + 5. Scala class, trait, abstract class.. - [Trait](./src/main/scala/ScalaBasic/TraitDemo.scala), [TraitAbstract](./src/main/scala/ScalaBasic/TraitAbstract.scala), [TraitDemo2](./src/main/scala/ScalaBasic/TraitDemo2.scala), [TraitAsInterface](./src/main/scala/ScalaBasic/TraitAsInterface.scala) - Scala `TraitDemo`, `Trait Abstract` basic op, properties. *NOTICE* : `Scala traits don’t allow constructor parameters` (so that's why we use abstract class) - [Abstract Class](./src/main/scala/ScalaBasic/AbstractClass.scala), [AbstractDemo](./src/main/scala/ScalaBasic/AbstractDemo.scala) - Scala also has a concept of an abstract class that is similar to Java’s abstract class. But because traits are so powerful, you rarely need to use an abstract class. In fact, you only need to use an abstract class when: diff --git a/src/main/scala/ScalaBasic/SuperConstruct.scala b/src/main/scala/ScalaBasic/SuperConstruct.scala new file mode 100644 index 0000000..299f915 --- /dev/null +++ b/src/main/scala/ScalaBasic/SuperConstruct.scala @@ -0,0 +1,33 @@ +package ScalaBasic + +// https://www.youtube.com/watch?v=EeN3v0zAsgg&list=PLmOn9nNkQxJEqCNXBu5ozT_26xwvUbHyE&index=80 + +object SuperConstruct extends App { + + // run 1 + val emp = new Employer_5("tom") + println(emp.name) + + println("---------------------") + + // run 2 + val emp2 = new Employer_5() + println(emp2.name) +} + +// Person_5 is Employer_5's father class +// Person_5's default main constructor is Person_5() +class Person_5 { + var name = "kyo" + println("Person_5 ....") +} + +// Employer_5 is Person_5's children class +// Employer_5's default main constructor is Employer_5() +class Employer_5 extends Person_5 { + def this(name: String){ + this // have to call main constructor at beginning + this.name = name + println("Employer_5 ....") + } +} \ No newline at end of file diff --git a/src/main/scala/ScalaBasic/SuperConstruct1_java.java b/src/main/scala/ScalaBasic/SuperConstruct1_java.java new file mode 100644 index 0000000..cc0740f --- /dev/null +++ b/src/main/scala/ScalaBasic/SuperConstruct1_java.java @@ -0,0 +1,34 @@ +package ScalaBasic; + +// https://www.youtube.com/watch?v=EeN3v0zAsgg&list=PLmOn9nNkQxJEqCNXBu5ozT_26xwvUbHyE&index=80 + +import com.sun.tools.internal.ws.wsdl.document.soap.SOAPUse; + +public class SuperConstruct1_java { + public static void main(String[] args){ + System.out.println("SuperConstruct1 ..."); + + } +} + +class A_java { + public A_java(){ + System.out.println("A()"); + } + public A_java(String name){ + System.out.println("A(String name)" + name); + } +} + +class B_java extends A_java{ + public B_java(){ + // here java will "implicitly" use super(), + // i.e. A_java() (without param) + System.out.println("B()"); + } + + public B_java(String name){ + super(name); + System.out.println("B(String name)" + name); + } +} \ No newline at end of file