目录
一.多态
二.多态中调用成员的特点
三.instanceof关键字
一.多态
多态:同类型的对象,表现出的不同形态
格式:父类类型 对象名称 = 子类对象;
前提:
(1)有继承关系
(2)有父类引用指向子类对象
(3)有方法重构
优点:
(1)使用父类作为参数,可以接收所有子类对象
(2)体现多态的扩展性和便利
代码示范:
第一段为父类Person,第二,第三,第四段分别是3个子类,第五段是测试代码
package Demo; public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void show(){ System.out.println(name+","+age); } }
package Demo; public class Student extends Person{ //重写方法 @Override public void show(){ System.out.println("学生的姓名为:"+getName()+" 年龄为:"+getAge()); } }
package Demo; public class Teacher extends Person{ //重写方法 @Override public void show(){ System.out.println("老师的姓名为:"+getName()+" 年龄为:"+getAge()); } }
package Demo; public class Administrator extends Person{ @Override public void show(){ System.out.println("管理员的姓名为:"+getName()+" 年龄为:"+getAge()); } }
package Demo; import java.rmi.registry.Registry; public class Test { public static void main(String[] args) { //创建对象 Student s = new Student(); s.setName("zhangsan"); s.setAge(19); Teacher t = new Teacher(); t.setName("lisi"); t.setAge(31); Administrator admin = new Administrator(); admin.setName("wangwu"); admin.setAge(40); register(s); register(t); register(admin); } //这个方法可以接收学生,老师,还有管理员 //将父类写在参数位置 public static void register(Person p){ p.show(); } }
结果展示:s是学生对象,t是老师对象,admin是管理员对象
二.多态中调用成员的特点
调用成员变量:编译看左边,运行也看左边
(编译看左边:javac编译代码时,会看左边父类有没有这个变量,如果有,编译成功,如果没有,编译失败; 运行看左边:java运行代码时,实际上运行的是左边父类的成员变量)
调用成员方法:编译看左边,运行看右边
(编译看左边:javac编译代码时,会看左边父类有没有这个方法,如果有,编译成功,如果没有,编译失败; 运行看右边:java运行代码时,实际上运行的是右边子类的成员方法)
代码示范:
package Demo1; public class Test { public static void main(String[] args) { Animal a = new Cat(); System.out.println(a.name); a.show(); } } //父类Animal class Animal{ String name = "动物"; public void show(){ System.out.println("animal show"); } } //子类Cat class Cat extends Animal{ String name = "猫"; @Override public void show(){ System.out.println("cat show"); } }
结果展示:
三.instanceof关键字
格式:对象名 instanceof 类名; (判断这个对象是不是后面这个类,是返回true,不是返回false)