多态 2021-06-12
Posted 超霸霸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多态 2021-06-12相关的知识,希望对你有一定的参考价值。
知识点
- 即同一个方法可以根据发送对象的不同而采用多种不同的行为方式
- 一个对象是实际类型是确定的,但可以指向对象的引用的类型有很多
- 多态存在的条件:
- 有继承关系
- 子类重写父类的方法
- 父类引用指向子类对象
- 注意:多态是方法的多态,属性没有多态性
- instanceof
实例演练
- 定义一个父类Perosn类,并定义一个run方法,代码如下:
//父类——Person类
public class Person {
public void run(){
System.out.println("run");
}
}
- 定义一个子类Student类,并定义两个方法run和eat,代码如下:
public class Student extends Person{
@Override
public void run(){
System.out.println("run");
}
public void eat(){
System.out.println("eat");
}
}
- 定义一个main类,代码如下:
public class main {
public static void main(String[] args) {
//一个对象的实际类型是确定的
//new Student();
//new Person();
//可以指向的引用类型就不确定了:父类的引用指向子类
//Student能调用的方法都是自己的或者继承父类的
Student s1=new Student();
//Person父类型,可以指向子类,但是不能调用子类独有的方法
Person s2=new Student();
Object s3=new Student();
//对象能执行哪些方法,看对象左边的类型,和右边关系不大
s1.eat();
s1.run();
s2.run(); //子类重写了父类的方法,执行子类的方法
}
}
运行结果如下:
可以看出:
- 对象能执行哪些方法,看对象左边的类型,和右边关系不大(s2只能执行run方法,不能执行eat方法)
- 如果子类重写了父类的方法,则调用时执行子类的方法
- 一个对象的实际类型确定,但指向的引用类型不确定(父类的引用指向子类)
- 若想在父类中执行子类的方法,则需要用到强制转换
public class main {
public static void main(String[] args) {
Student s1=new Student();
Person s2=new Student();
Object s3=new Student();
s1.eat();
s1.run();
s2.run(); //子类重写了父类的方法,执行子类的方法
//s2.eat(); //不能调用
((Student)s2).eat();
//s3.run(); //不能调用
((Student)s3).eat();
}
}
运行结果如下:
总结
-
多态是方法的多态,属性没有多态
-
父类和子类必须要有联系,否则类型转换异常(ClassCastException)
-
多态存在条件:继承关系,方法需要重写,父类引用指向子类对象 Father f1 = new Son();
-
以下方法不能被重写:
- static方法,属于类,它不属于实例
- final 常量
- private 方法
以上是关于多态 2021-06-12的主要内容,如果未能解决你的问题,请参考以下文章