多态
多态
Student s1=new Student();
Person s2=new Student();//java中可以通过父类来创建子类
Object s3=new Student();//Object是所有类的父类
对象能执行哪些方法,主要看对象左边的类型,和右边关系不大!
多态注意事项:
- 多态是方法的多态,属性没有多态,即子类和父类有相同名称的方法,子类可以重写父类的方法
- 父类和子类要有联系,否则会类型转换异常!ClassCastException
- 存在条件: 有继承关系,方法需要重写,父类引用指向子类对象!
father f1=new Son();
特别的:
- static关键字 方法属于类,不属于实例,不能重写
- final (常量)关键字 方法:不能重写
- private:私有,不能重写
instanceof
用法:
X instanceof Y;
判断X是否为Y类的实例化对象且有继承关系
关键词 instanceof判断一个对象与指定类型是否有关系,返回值为boolean类型
public class Person {
}
public class Student extends Person{
}
public class Teacher extends Person {
}
public class Application {
public static void main(String[] args) {
Object object = new Student();
//Object>Person>Student
//Object>Person>Teacher
System.out.println(object instanceof Student);
System.out.println(object instanceof Person);
System.out.println(object instanceof Object);
System.out.println(object instanceof Teacher);
System.out.println(object instanceof String);
}
}
true true true false false
类型转换
public class Person {
}
public class Student extends Person{
public void run()
{
System.out.println("run");
}
}
public class Teacher extends Person {
}
public class Application {
public static void main(String[] args) {
//低转高,可以自由转换
Person student = new Student();
//但是Person类中没有run()方法,需要进行 高转低 的类型转换
Student student1 = (Student) student;//用一个新的Student类对象存储转换后的
student1.run();
//也可以不创建对象直接转换
((Student)student).run();
}
}
小结:
- 父类引用指向子类的对象
- 把子类转换为父类,向上转型,可以直接转,子类转换为父类可能会丢失子类本身的方法
- 把父类转换为子类,向下转型,需要强制转换
- 多态目的是为了方便方法的调用,减少重复的代码
浙公网安备 33010602011771号