目录
一.多态
二.多态中调用成员的特点
三.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{//重写方法@Overridepublic void show(){System.out.println("学生的姓名为:"+getName()+" 年龄为:"+getAge());}}
package Demo;public class Teacher extends Person{//重写方法@Overridepublic void show(){System.out.println("老师的姓名为:"+getName()+" 年龄为:"+getAge());} }
package Demo;public class Administrator extends Person{@Overridepublic 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 = "猫";@Overridepublic void show(){System.out.println("cat show");} }
结果展示:
三.instanceof关键字
格式:对象名 instanceof 类名; (判断这个对象是不是后面这个类,是返回true,不是返回false)