Java里的多态
多态是同一个行为具有多个不同表现形式或形态的能力。
在Java中,多态的表达式为Father f = new Son()
,其中Father类为Son类的父类。f可以调用父类中的所有方法,当子类把父类中的方法重写之后,子类就会调用重写之后的方法。
public class Person { //父类
public void run(){ //父类方法
System.out.println("Person");
}
}
public class Student extends Person { //子类
@Override
public void run() { //重写父类的run()
System.out.println("Student");
}
public void eat(){ //子类自己的方法
System.out.println("tomato");
}
}
public class Application { //测试类
public static void main(String[] args) {
Student s1 = new Student(); //子类自己实例化
Person s2 = new Student(); //Person为Student父类 实现多态
Object s3 = new Student(); //Object是所有类的父类 实现多态
s1.run();
s2.run();
s1.eat();
// s2.eat(); //报错(找不到该方法) //s2是多态的得到实际为父类对象,故没有子类方法
}
}
运行结果:
多态的注意事项:*
1.多态只是方法的多态,属性没有多态。
2.多态是父类和之类之间的联系,如果强制没有没有联系的类使用多态,会报类型转换异常 ClassCastException
3.多态的条件:两个类之间要有继承关系,方法要重写(不重写无意义)父类引用指向之类对象
方法不能重写的几种情形:
方法不能被重写的几种情形:
1.被static修饰 为类方法不能被重写
2.被final修饰 为常量
3.被private修饰 private修饰的方法为私有方法,也不能重写
补充:
Java关键字instanceof
只能用在两个有关系的类做比较,当使用在毫无联系的类作比较时会爆红。
System.out.println(s2 instanceof Student);//true 本类
System.out.println(s2 instanceof Teacher);//false Teacher为Person类的子类,与Student无关
System.out.println(s2 instanceof Person);//true Person为Student的父类
System.out.println(s2 instanceof Object);//true Object为所有类的父类
System.out.println(s2 instanceof String);//false String类与Student没有关系