多态
-
方法的多态,属性没有多态
-
多态注意事项
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
复制代码
1
2
3
4
5
6
7package oop.demo07; public class Person { public void run(){ System.out.println("run"); } }
Student
复制代码
1
2
3
4
5
6
7
8
9
10package oop.demo07; public class Student extends Person { public void run(){ System.out.println("son");//重写了 } public void eat(){ System.out.println("eat");//独有的方法 } }
Teacher
复制代码
1
2
3
4
5
6
7package oop.demo07; public class Teacher extends Person { public void walk(){ System.out.println("run");//重写了Person类 } }
main
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24package 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基础内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复