继承中成员变量的访问特点:
在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,
访问成员变量有两种方式:
1. 直接通过子类对象访问成员变量:
等号左边是谁,就优先用谁,没有则向上找。
2. 间接通过成员方法访问成员变量:
该方法属于谁,就优先用谁,没有则向上找。
package cn.itcast.day09.demo02;
public class Demo01ExtendsField {
public static void main(String[] args) {
Fu fu=new Fu();
System.out.println(fu.numFu);
System.out.println("=================");
Zi zi=new Zi();
System.out.println(zi.numFu);
System.out.println(zi.numZi);
System.out.println("=================");
System.out.println(zi.num);
System.out.println("=================");
zi.methodZi();
zi.methodFu();
}
}
package cn.itcast.day09.demo02;
public class Fu {
int numFu=10;
int num=100;
public void methodFu(){
System.out.println(num);
}
}
package cn.itcast.day09.demo02;
public class Zi extends Fu {
int numZi=20;
int num=200;
public void methodZi(){
System.out.println(num);
}
}
多态中成员变量的访问特点:
多态中访问成员变量的两种方式:
1.直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,
没有则向上找(注意:编译和运行都仅看等号左边,与多态中访问
成员方法不同)。
2.间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,
没有则向上找。
package cn.itcast.day10.demo05;
public class Demo01MultiField {
public static void main(String[] args) {
Fu obj=new Zi();
System.out.println(obj.num);
System.out.println("=============");
obj.showNum();
}
}
package cn.itcast.day10.demo05;
public class Fu {
int num=10;
public void showNum(){
System.out.println(num);
}
}
package cn.itcast.day10.demo05;
public class Zi extends Fu {
int num=20;
int age=16;
@Override
public void showNum(){
System.out.println(num);
}
}
多态中成员方法的访问特点:
在多态的代码当中,成员方法的访问规则是:
看new的是谁,就优先用谁,没有则向上找。
口诀:编译看左边,运行看右边(左父右子,即编译看父,运行看子)。
即使用多态方式调用成员方法时,编译看父类,首先检查父类
是否有该方法,如果没有,则编译报错;如果有,则运行时再去检查
子类是否有此方法,若子类有此方法,则运行时优先调用子类的该方法,
若子类没有该方法,则运行时调用父类的该方法。
package cn.itcast.day10.demo05;
public class Demo02MultiMethod {
public static void main(String[] args) {
Fu obj=new Zi();
obj.method();
obj.methodFu();
}
}
package cn.itcast.day10.demo05;
public class Fu {
int num=10;
public void showNum(){
System.out.println(num);
}
public void method(){
System.out.println("父类方法");
}
public void methodFu(){
System.out.println("父类特有方法");
}
}
package cn.itcast.day10.demo05;
public class Zi extends Fu {
int num=20;
int age=16;
@Override
public void showNum(){
System.out.println(num);
}
@Override
public void method(){
System.out.println("子类方法");
}
public void methodZi(){
System.out.println("子类特有方法");
}
}