From 7ac4de47365e222dd89577682dfe42b2860810e6 Mon Sep 17 00:00:00 2001 From: yennanliu Date: Thu, 11 Feb 2021 17:39:12 +0800 Subject: [PATCH] add SuperConstruct examples --- README.md | 2 ++ .../scala/ScalaBasic/SuperConstruct.scala | 33 ++++++++++++++++++ .../ScalaBasic/SuperConstruct1_java.java | 34 +++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 src/main/scala/ScalaBasic/SuperConstruct.scala create mode 100644 src/main/scala/ScalaBasic/SuperConstruct1_java.java 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