1.多态定义:
同一个行为具有多个不同表现形式或形态的能力。
2.多态形式:
父类:
public class Father {
public void work(){
System.out.println("爸爸要工作!");
}
}
子类:
public class Child extends Father{
public void work(){
System.out.println("小孩只知道睡觉");
}
}
测试类:
public class Demo {
public static void main(String[] args) {
Father f = new Child();
f.work();
}
}
可以发现多态:
- 存在继承关系
- 有方法的重写
- 父类引用指向子类对象,
Father f = new Child();
3.多态中成员的特点
多态成员变量:编译看左边,运行看左边
多态成员方法:编译看左边,运行看右边
父类:
public class Father {
int age =48;
public void eat(){
System.out.println("爸爸要吃饭");
}
public void work(){
System.out.println("爸爸要工作");
}
}
子类:
public class Child extends Father{
int age = 5;
int weight =20;
@Override
public void eat() {
System.out.println("儿子要吃饭");
}
}
测试类:
public class Demo {
public static void main(String[] args) {
Father f = new Child();
// System.out.println(f.weight);//错误
System.out.println(f.age);//48
f.eat();//儿子要吃饭
f.work();//爸爸要工作
}
}
4.多态中的转型
向上转型:父类引用指向子类对象(子类转换为父类)
向下转型:父类引用转为子类对象(父类转换为子类)
Father f =new Child();
Child c =(Child)f;
父类:
public class Father {
int age =48;
public void eat(){
System.out.println("爸爸要吃饭");
}
public void work(){
System.out.println("爸爸要工作");
}
}
子类:
public class Child extends Father{
int age = 5;
int weight =20;
@Override
public void eat() {
System.out.println("儿子要吃饭");
}
}
测试类:
public class Demo {
public static void main(String[] args) {
// 1.向上转型
Father f = new Child();
System.out.println(f.weight);//错误
// System.out.println(f.age);//48
//
// f.eat();//儿子要吃饭
// f.work();//爸爸要工作
// 2.向下转型
Child c = (Child)f;
System.out.println(c.age);//2
System.out.println(c.weight);//20
c.eat();//儿子要吃饭
c.work();//爸爸要工作
}
}