多态
程序员文章站
2022-05-20 10:33:56
...
多态
即同一方法可以根据发送对象的不同而采用多种不同的方式
一个对象的实际类型是确定的,但是可以指向对象的引用类型有很多(父类、有关系的类)
注意事项
-
多态是方法的多态,没有属性的多态。
-
关系:父类和子类、有联系的类。
-
存在条件:继承关系,子类需要重写父类方法,父类引用指向子类实例化对象!例如:Father father = new Son();
-
什么样的方法不能被重写?
- static方法:属于类,不属于对象实例
- final常量
- 被private修饰的方法
-
把子类转换为父类,向上转型,不需要强转。
-
把父类转换为子类,向下转型,需要强转,但是在转换过程中会丢失一些自己的方法,因为父类不能直接使用子类的方法,但是子类可以继承父类并且使用。(具体可以与基本数据类型的强制转换进行对比,可以理解为丢失精度)
instanceof和类型转换
使用:x instanceod y
编译是否能通过:主要观察x和y之间是否有联系
结果是false还是true:主要看x指向的对象和y之间是否有联系
测试案例:现在给出三条关系线,依次从大到小,来测试一下instanceof的用法:
-
Object–>Person–>Student
-
Object–>Person–>Teacher
-
Object–>String
//父类Person
public class Person {
}
//子类Teacher继承父类Person
public class Teacher extends Person{
}
//子类Student继承父类Person
public class Student extends Person{
}
public static void main(String[] args) {
Object obj = new Student();//创建obj的引用指向学生对象
System.out.println(obj instanceof Student); //true
System.out.println(obj instanceof Person); // true
System.out.println(obj instanceof Object); // true
System.out.println(obj instanceof Teacher);// false
System.out.println(obj instanceof String); // false
Person person = new Student();//创建person的引用指向学生对象
System.out.println(person instanceof Student);// true
System.out.println(person instanceof Person);// true
System.out.println(person instanceof Object);// true
System.out.println(person instanceof Teacher);// false
//System.out.println(person instanceof String); // 编译报错
Student student = new Student();//创建student的引用指向学生对象
System.out.println(student instanceof Student); //true
System.out.println(student instanceof Person); // true
System.out.println(student instanceof Object); // true
//System.out.println(student instanceof Teacher);// 编译报错
// System.out.println(student instanceof String); // 编译报错
}
上一篇: Java中的可变参数使用
下一篇: super和this的区别以及注意事项