package com.nwpu.test.TSTest; public class SuperTest05 { public static void main(String[] args) { Vip v = new Vip("张三"); v.shopping(); System.out.println("---------------------"); v.doSome(); } } class Customer{ String name; public Customer() { } public Customer(String name) { this.name = name; } public void doSome(){ System.out.println(this.name + "doSome!!!"); //System.out.println(super.name + "doSome!!!");//编译报错 System.out.println(name + "doSome!!!"); } } class Vip extends Customer { //假设子类也有一个同名属性 String name; //实例变量 public Vip() { } public Vip(String name) { super(name); //这个是前面讲了的,如果我们不赋值的话, //系统会自动初始化实例变量的值为对应类型的默认值。 //所以这里还有一句代码: //this.name = null; } public void shopping() { System.out.println(this.name + "正在购物"); System.out.println(super.name + "正在购物"); System.out.println(name + "正在购物"); } }解释一下为什么v.dosom
时间: 2024-04-28 11:19:10 浏览: 74
基于python编程实现的NWPU计算流体力学大作业项目源码.zip
e()方法中的代码`System.out.println(super.name + "doSome!!!");//编译报错`会编译报错。
在Java中,子类可以继承父类的实例变量和方法,但是如果子类中也定义了同名的实例变量,则会覆盖父类的同名实例变量,因为Java中实例变量是可以被子类继承的。在`Vip`类中,定义了一个同名实例变量`name`,因此在`Vip`类中,`this.name`会指向子类自己的`name`实例变量,而不是父类的`name`实例变量。因此,在`Vip`类的`shopping()`方法中,`this.name`和`name`都指向子类自己的`name`实例变量。而在`Vip`类的`doSome()`方法中,即使使用`super`关键字也无法访问父类的同名实例变量`name`,因为同名实例变量已经被子类覆盖,父类的同名实例变量已经被隐藏了,因此编译报错。
阅读全文