From d77e9f903b42ee995f3eef5296b5b3a00f81cb41 Mon Sep 17 00:00:00 2001 From: xiongraorao Date: Thu, 6 Sep 2018 10:00:51 +0800 Subject: [PATCH] update --- .../java/com/raorao/java/oop/Children.java | 17 +++++ .../main/java/com/raorao/java/oop/Client.java | 16 ++++ .../main/java/com/raorao/java/oop/Father.java | 16 ++++ interview/java/base.md | 75 +++++++++++++++++++ interview/note.md | 4 +- 5 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 code/src/main/java/com/raorao/java/oop/Children.java create mode 100644 code/src/main/java/com/raorao/java/oop/Client.java create mode 100644 code/src/main/java/com/raorao/java/oop/Father.java diff --git a/code/src/main/java/com/raorao/java/oop/Children.java b/code/src/main/java/com/raorao/java/oop/Children.java new file mode 100644 index 00000000..42033d65 --- /dev/null +++ b/code/src/main/java/com/raorao/java/oop/Children.java @@ -0,0 +1,17 @@ +package com.raorao.java.oop; + +/** + * 子类. + * + * @author Xiong Raorao + * @since 2018-09-06-9:27 + */ +public class Children extends Father { + + int sum = 2; + int chlid = 3; + + public void say() { + System.out.println("this is children say!"); + } +} diff --git a/code/src/main/java/com/raorao/java/oop/Client.java b/code/src/main/java/com/raorao/java/oop/Client.java new file mode 100644 index 00000000..80460f8d --- /dev/null +++ b/code/src/main/java/com/raorao/java/oop/Client.java @@ -0,0 +1,16 @@ +package com.raorao.java.oop; + +/** + * 测试. + * + * @author Xiong Raorao + * @since 2018-09-06-9:28 + */ +public class Client { + + public static void main(String[] args) { + Father f = new Children(); + System.out.println(f.num); + f.say(); + } +} diff --git a/code/src/main/java/com/raorao/java/oop/Father.java b/code/src/main/java/com/raorao/java/oop/Father.java new file mode 100644 index 00000000..bb24b52b --- /dev/null +++ b/code/src/main/java/com/raorao/java/oop/Father.java @@ -0,0 +1,16 @@ +package com.raorao.java.oop; + +/** + * 父类. + * + * @author Xiong Raorao + * @since 2018-09-06-9:26 + */ +public class Father { + int num = 1; + public void say(){ + System.out.println("this is father say!"); + } +} + + diff --git a/interview/java/base.md b/interview/java/base.md index ee9d16d8..d37cfde3 100644 --- a/interview/java/base.md +++ b/interview/java/base.md @@ -47,6 +47,11 @@ - [静态内部类](#静态内部类) - [java 代码块](#java-代码块) - [代码块执行顺序](#代码块执行顺序) +- [java 多态](#java-多态) + - [多态实现的几种方式](#多态实现的几种方式) + - [向上转型](#向上转型) + - [向下转型](#向下转型) + - [结论](#结论) - [参考文档](#参考文档) @@ -964,6 +969,76 @@ Iterator it = s.iterator();得到的it的真正类型是KeyIterator,是Iterato 静态代码块 > 构造代码块 > 构造函数 +# java 多态 + +多态体现为父类引用变量可以指向子类对象:父类类型 变量名 = new 子类类型(); + +1、多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。 +2、在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。 + +## 多态实现的几种方式 + +1、普通父类多态 + +``` java +class A{ +} + +class B extends A{ + +} + +A a = new B(); +``` + +2、抽象类多态 + +``` java +abstract class A{ + +} + +class B extends A{ + +} + +A a = new B(); +``` + +3、接口多态 + +``` java +interface A { + +} + +class B implements A{ + +} + +A a = new B(); + +``` + +**同一个父类的方法会被不同的子类重写。在调用方法时,调用的为各个子类重写后的方法。** + +## 向上转型 + +父类类型 变量名 = new 子类类型(); + +## 向下转型 + +子类类型 变量名 = (子类类型) 父类类型的变量; + +如:Person p = new Student(); +Student stu = (Student) p + +注意:如果是直接创建的父类对象,是无法向下转型为子类对象的。 + +## 结论 + +对于成员变量,看编译(静态)类型; +对于成员方法,看运行(动态)类型; # 参考文档 diff --git a/interview/note.md b/interview/note.md index 95cb9ab3..c3e00daf 100644 --- a/interview/note.md +++ b/interview/note.md @@ -51,7 +51,9 @@ Intel | 8.23 | 8.23(新投递) | 电面 | 8.24一面 Keep | 8.31 | 8.31(新投递) 小红书 | 8.31 | 8.31(新投递) 中国银联 | 9.3 | 9.3(官网新投递) - +三七互娱 | 9.5 | 9.5(官网新投递) +去哪儿网 | 9.5 | 9.5(官网新投递) +搜狗 | 9.5 | 9.5(官网新投递) # 2 复习内容