第13章 多态
程序员文章站
2022-07-12 18:52:17
...
一、运算符instanceof的用法
public class Student1 extends Person1 {
public static void main(String[] args) {
Student1 s = new Student1();
Person1 p = new Person1();
// instanceof判断的是左侧对象跟右侧类型是否一致,或者是,右侧
//类型是左侧对象的父类
System.out.println(s instanceof Student1);
System.out.println(s instanceof Person1);
System.out.println(p instanceof Student1);
System.out.println(p instanceof Person1);
}
}
class Person1{
}
二、对象的类型转换
/*
* 数据类型转换分为两种,一种是自动类型转换,一种是强制类型转换
*
* 对象类型也存在类型转换,称为对象转换
* 对象转换分为两种,一种是向上类型转换,一种是向下类型转换
* 向上类型转换:子类对象给父类赋值-->自动转换
* 向下类型转换:父类对象给子类赋值-->强制转换
*
* 向上转换的实质是父类引用最终指向的是子类中那个小的父类对象
*向下转换的注意事项是:必须要经过向上类型转换才能进行向下类型转换,否则
*编译报错。
*/
public class Student2 extends Person2 {
public static void main(String[] args) {
// 向上类型转换,子类对象给父类赋值
// 父类类型的引用变量指向子类对象
// 自动转换
// 实质是,父类的引用变量指向的是子类对象中的那个小的父类对象
Person2 p1 = new Student2();
Student2 s = new Student2();
Person2 p = s;
// 向下类型转换,父类给子类赋值
// 子类的引用变量指向父类对象
// 强制类型转换
// 要保证父类对象在子类对象之中,才能进行向下类型转换
Person2 p2 = new Student2();
Student2 s1 = (Student2) p2;
// Student2 s1 = (Student2) new Person2();
// Person2 p2 = new Person2();
// Student2 s2 = (Student2) p2;
}
}
class Person2{
}
三、多态性
/*
* 多态:同样的消息被不同类型的对象接收,产生不同的结果,就是多态
* 条件:要有继承、重写、向上类型转换
* 三个条件才能发生多态
*/
public class TestDemo {
public static void main(String[] args) {
Animal a = new Animal();
Animal dog = new Dog();
Animal cat = new Cat();
a.cry();
dog.cry();
cat.cry();
}
}
class Animal{
public void cry() {
System.out.println("动物叫声");
}
}
class Dog extends Animal{
@Override
public void cry() {
System.out.println("汪汪");
}
}
class Cat extends Animal{
@Override
public void cry() {
System.out.println("喵喵");
}
}
上一篇: SpringCloud之路由网关zuul和过滤器(五)
下一篇: 第13章 集合