父类引用可以指向子类对象,例如class B extends A{},主方法中A a = new B();那么父类引用a可以访问A类中的属性或者方法,a不可以访问B类中新增加的属性和方法,这个是没有问题的。a也可以调用B类中重写了A类的方法,这个也是可以的。
但是如果B类重写了A类的方法中,同时调用了B类中自己新增加的属性或者方法,那么运行也是没有问题的?这个不明白,求大神解释?
结合代码如下:
- class A {
- public String name;
- void show() {
- System.out.println("A.....show " + name + " ");
- }
- void fn() {
- System.out.println("A....fn " + name + " ");
- }
- }
- class B extends A {
- public int age;
- void show() {
- fnx();
- System.out.println("B.....show "+name + " "+age);
- }
- void fnx() {
- System.out.println("B.....fnx "+name + " "+age);
- }
- }
- class MainDemo {
- public static void main(String[] args) {
- A a = new B();
-
- a.name = "张三";//可以,访问父类自己的属性
- a.fn();//可以,访问父类自己的方法
-
- //a.age = 11;//不可以,访问了子类新增加的属性
- //a.fnx();//不可以,访问了子类新增加的方法
- a.show();//可以,访问子类重写了父类的方法,但是该重写方法
- //中调用了子类新增加的方法和属性,求解释?
- /*
- 运行结果如下:
- A....fn 张三
- B.....fnx 张三 0
- B.....show 张三 0
- */
- }
- }
复制代码 |