- 多态性
- instanceof 关键字
- 抽象类的应用
- 接口的应用
多态
- 多态性的体现
- 对象的多态性
- 向上转型 : 程序会自动完成
- 向下转型 : 强制类型转换
对象的多态性
向上转型
1 2 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(); } }
|
实现效果:
向下转型
向下转型必须先发生想上转型,再发生向下转型
1 2 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(); } }
|
实现效果:
1 2 3
| B--tell1 A--tell2 B--tell3
|
多态性的应用
1 2 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(); } }
|
实现效果:
多态性
1 2 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
关键字判断一个对象到底是不是一个类的实例
1 2 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); } }
|
实现效果
1 2 3 4
| true//a 是一个 A false//a 不是一个 B true//a1 是一个 A true//a1 是一个 B
|
抽象类的应用
抽象类由abstract
修饰
1 2 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 **修饰,后面没有括号
方法后面有括号
接口的使用
1 2 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()); } }
|
实现效果:
1 2 3 4 5 6
| U 盘开始工作 工作中 U 盘停止工作 打印机开始工作 工作中 打印机停止工作
|