2. 多态
2.1 概述
2.2 多态的格式与使用
代码当中体现多态性,其实就是一句话:父类的引用指向子类对象。
‘左父右子’ 就是对象的多态
格式:
父类名称 对象名 = new 子类名称(); //一只猫被当做一个动物看待是没有什么问题的
或者: //这里子类就是父类,子类被当做父类来看待了
接口名称 对象名 = new 实现类名称(); //这就是对象的多态性
public class Fu {
public void methodFu(){
System.out.println("父类特有方法");
}
public void method(){
System.out.println("父类方法");
}
}
public class Zi extends Fu{
@Override
public void method() {
System.out.println("子类方法");
}
}
public class Demo01Multi {
public static void main(String[] args) {
//使用对态的写法
//左侧父类的引用,指向了右侧子类的对象
Fu obj = new Zi();
obj.method();
// obj.methodFu();
}
}
多态中成员变量的使用特点:
访问成员变量的两种方式:
- 直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找。
//成员变量重名是没有覆盖重写的。但这个时候,如果父类没有,是父类是不会向下查找的。 - 间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找。【继承是存在,父类的成员还是属于父类】
public class Fu /*extends Object*/{
int num = 20;
int num1 = 40;
public void showNum(){
System.out.println("父类num" + num);
}
public void showNum1(){
System.out.println("父类num1:" + num1);
}
}
public class Zi extends Fu{
int num = 30;
int avg = 16;
@Override
public void showNum(){
System.out.println(num);
}
}
public class Demo01MultiField {
public static void main(String[] args) {
//使用多态的写法,父类引用指向子类对象
Fu obj = new Zi();
System.out.println(obj.num);//这可能是唯一一种直接访问父类的成员变量的方式。
// System.o