Java学习笔记——多态
程序员文章站
2024-03-21 19:28:58
...
多态:事物存在的多种形态。
Java中存在多态的前提条件:
- 要有继承关系
- 要有方法重写
- 要有父类引用指向子类对象
多态中的成员访问特点:
- 成员变量:编译看左边(父类),运行看左边(父类)
public class Main {
public static void main(String[] args) {
Son son1 = new Son(); //此时print出来num=20
//父类引用指向子类对象
Father son2 = new Son();//此时print出来num=10
System.out.println(son1.num+","+son2.num);
}
}
class Father{
int num = 10;
}
class Son extends Father{
int num = 20;
}
运行结果:
20,10
- 成员方法:编译看左边(父类),运行看右边(子类)
public class Demo02 {
public static void main(String[] args) {
Daughter d = new Daughter();
Mom d2 = new Daughter();
d.hi();
d2.hi();
}
}
class Mom{
int num = 10;
public void hi(){
System.out.println("hi Mom!");
}
}
class Daughter extends Mom{
int num = 20;
public void hi(){
System.out.println("hi Daughter!");
}
}
运行结果:
hi Daughter!
hi Daughter!
- 静态方法:编译看左边(父类),运行看左边(父类)
package lesson03;
public class Demo03 {
public static void main(String[] args) {
Daughter d = new Daughter();
Mom d2 = new Daughter();
d.hi();
d2.hi();
}
}
class Mom{
int num = 10;
public static void hi(){
System.out.println("hi Mom!");
}
}
class Daughter extends Mom{
int num = 20;
public static void hi(){
System.out.println("hi Daughter!");
}
}
运行结果:
hi Daughter!
hi Mom!
总结:只有非静态的成员方法,编译看左边,运行看右边。
向上转型:子类对象赋值给父类对象;
向下转型:父类对象赋值给子类对象。
上一篇: 线性表和带头结点的双向循环链表
下一篇: 向上转型和动态绑定机制