- 多态性
- instanceof 关键字
- 抽象类的应用
- 接口的应用
多态
- 多态性的体现
- 对象的多态性
- 向上转型 : 程序会自动完成
- 向下转型 : 强制类型转换
 
对象的多态性
向上转型
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 
 | class A{public void tell1(){
 System.out.println("A--tell1");
 }
 public void tell2(){
 System.out.println("A--tell2");
 }
 }
 class B extends A{
 public void tell1(){
 System.out.println("B--tell1");
 }
 public void tell3(){
 System.out.println("B--tell3");
 }
 }
 
 public class PolDemo01{
 public static void mian(String[] args){
 
 B b = new B();
 A a = b;
 
 a.tell1();
 a.tell2();
 }
 }
 
 | 
实现效果:
向下转型
向下转型必须先发生想上转型,再发生向下转型
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
 | class A{public void tell1(){
 System.out.println("A--tell1");
 }
 public void tell2(){
 System.out.println("A--tell2");
 }
 }
 class B extends A{
 public void tell1(){
 System.out.println("B--tell1");
 }
 public void tell3(){
 System.out.println("B--tell3");
 }
 }
 
 public class PolDemo02{
 public static void mian(String[] args){
 A a = new B();
 B b = (B)a;
 b.tell1();
 b.tell2();
 b.tell3();
 }
 }
 
 | 
实现效果:
| 12
 3
 
 | B--tell1A--tell2
 B--tell3
 
 | 
多态性的应用
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 
 | class A1{public void tell1(){
 System.out.println("A--tell1");
 }
 }
 class B1 extends A1{
 public void tell2(){
 System.out.println("B--tell2");
 }
 }
 class C1 extends A1{
 public void tell3(){
 System.out.println("C--tell3");
 }
 }
 public class PolDemo02{
 public static void mian(String[] args){
 
 say(new B1());
 say(new C1());
 }
 public static void say(B1 b){
 b.tell1();
 }
 public static void say(C1 c){
 c.tll1();
 }
 }
 
 | 
实现效果:
多态性
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 
 | class A1{public void tell1(){
 System.out.println("A--tell1");
 }
 }
 class B1 extends A1{
 public void tell2(){
 System.out.println("B--tell2");
 }
 }
 class C1 extends A1{
 public void tell3(){
 System.out.println("C--tell3");
 }
 }
 class D1 extends A1{
 
 }
 public class PolDemo02{
 public static void mian(String[] args){
 
 say(new B1());
 say(new C1());
 say(new D1());
 }
 public static void say(A1 a){
 a.tell1();
 }
 }
 
 | 
实现效果:
instanceof 关键字
在 java 中可以使用instanceof关键字判断一个对象到底是不是一个类的实例
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 
 | class A{public void tell1(){
 System.out.println("A--tell1");
 }
 public void tell2(){
 System.out.println("A--tell2");
 }
 }
 class B extends A{
 public void tell1(){
 System.out.println("B--tell1");
 }
 public void tell3(){
 System.out.println("B--tell3");
 }
 }
 
 public class PolDemo02{
 public static void mian(String[] args){
 A a = new A();
 System.out.println(a instanceof A);
 System.out.println(a instanceof B);
 
 A a1 = new B();
 System.out.println(a1 instanceof A);
 System.out.println(a1 instanceof B);
 }
 }
 
 | 
实现效果
| 12
 3
 4
 
 | true//a 是一个 Afalse//a 不是一个 B
 true//a1 是一个 A
 true//a1 是一个 B
 
 | 
抽象类的应用
抽象类由abstract修饰
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 
 | abstract class Person{private int age;
 private String name;
 
 public Person(int age,String name){
 this.age = age;
 this.name = name;
 }
 public int getAge(){
 return age;
 }
 public int setAge(){
 this.age = age;
 }
 public int getName(){
 return name;
 }
 public int setName(){
 this.name = name;
 }
 public abstract void want();
 }
 
 class Student extends Person{
 private int score;
 public int getScore(){
 return score;
 }
 public int setScore(){
 this.score = score;
 }
 
 
 public Student(int age, String name, int score){
 super(age,name);
 this.score = score;
 }
 
 
 public void want(){
 System.out.println("姓名:"+getName()+"年龄:"+getAge()+"成绩:"+getScore());
 }
 }
 class Worker extends Person{
 private int moneny;
 public int getScore(){
 return moneny;
 }
 
 public int setMoney(){
 this.money = money;
 }
 
 
 public Student(int age, String name, int money){
 super(age,name);
 this.money = money;
 }
 
 
 public void want(){
 System.out.println("姓名:"+getName()+"年龄:"+getAge()+"工资:"+getMoney());
 }
 }
 public class AbsDemo01{
 public static void mian(String[] args){
 Student stu = new Student(10, "小明", 99);
 stu.want();
 Worker wor = new Worker(35, "老王", 5000);
 wor.want();
 }
 }
 
 | 
类用** class **修饰,后面没有括号
方法后面有括号
接口的使用
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 
 | interface USB{void start();
 void stop();
 }
 class C{
 public static void work(USB u){
 u.start();
 System.out.println("工作中");
 u.stop();
 }
 }
 class USBDisk implements USB{
 public void start(){
 System.out.println("U 盘开始工作");
 }
 public void stop(){
 System.out.println("U 盘停止工作");
 }
 }
 class Printer implements USB{
 public void start(){
 System.out.println("打印机开始工作");
 }
 public void stop(){
 System.out.println("打印机停止工作");
 }
 }
 public class InterDemo01{
 public static void main(String[] args){
 C.work(new USBDisk());
 C.work(new Printer());
 }
 }
 
 | 
实现效果:
| 12
 3
 4
 5
 6
 
 | U 盘开始工作工作中
 U 盘停止工作
 打印机开始工作
 工作中
 打印机停止工作
 
 |