概述
多态
-
方法的多态,属性没有多态
-
多态注意事项
1.多态是方法的多态,属性没有多态
2.父类和子类,有联系 类型转换异常!ClassCastException(需要有父子类的联系才能强制转换)
3.存在条件:继承关系,方法需要重写父类的引用指向子类对象;Father f1 = new Son(); -
不能重写的
1.static静态方法
2.final常量
3.private私有 -
同一个方法可以根据发送对象的不同二采用多种不同的行为方式
-
一个对象的实际类型是确定的,但可以指向对象的引用类型有很多(父类 有关系的类)
多态存在的条件
- 继承关系
- 子类重写父类的方法
- 父类引用指向子类对象
Person s1 = new Student();结构就是说
- Student和Person之间必要有继承关系才能这样
- Student()是s1的实际类型,而Person是指向s1对象的类型
- s1可以调用Person类(父类)的方法,但同时父类的方法又被Student()类(子类)继承了,所以没啥区别
- 当Student()(子类)把Person(父类)的方法重写之后,s1虽然是调用的Person里的方法,但是该方法被重写,所以输出结果是被重写后的子类里的结果
- 所以它的作用是:不能调用子类独有的方法,反正目前来看是这样
- 但是也可以把父类的这个引用强制转换,以调用子类的方法【((Student) s1).walk();】
样例
Person
package oop.demo07;
public class Person {
public void run(){
System.out.println("run");
}
}
Student
package oop.demo07;
public class Student extends Person {
public void run(){
System.out.println("son");//重写了
}
public void eat(){
System.out.println("eat");//独有的方法
}
}
Teacher
package oop.demo07;
public class Teacher extends Person {
public void walk(){
System.out.println("run");//重写了Person类
}
}
main
package oop.demo07;
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
//new Student()
//new Person()
//可以指向的引用类型就不确定了
Student s1 = new Student();
//Student 能调用的方法都是自己的或者继承了父类的方法
Person s2 = new Student();//父类的引用指向子类
//Person 父类,可以指向子类,但是不能调用子类独有的方法
//Object s3 = new Student();
Person t1 = new Teacher();
t1.walk();//指向的是Person的walk方法,但是该方法被Teacher重写了
//所以输出的是重写后的结果
//对象执行哪些方法,主要看对象左边的类型,和右边关系不大
s1.run();
s2.run();//子类重写了父类的方法,执行子类的方法
s1.eat();
//s2.eat();//父类没有这个方法,所以不能调
((Student) s2).eat();//强制将Person 转换为Student
}
}
最后
以上就是大方时光为你收集整理的java基础:多态的全部内容,希望文章能够帮你解决java基础:多态所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复