Java 这些不同的任务是如何改变输出的

Java 这些不同的任务是如何改变输出的,java,Java,输出: 对于问题1、2、3,输出为猫科美洲狮f 取消对问题1的注释输出为猫科美洲狮c 取消注释问题2的输出是猫科美洲狮f d 取消对问题3的注释输出为猫科美洲狮d主super is猫科动物,因为扩展 对于问题1,您更改了this.type和type,在这种情况下,它们是相同的,但您没有更改super.type,它仍然是猫中定义的类型 对于问题2和问题3,您只更改了局部变量,而没有更改超级或公共类型 当问题2已注释且问题3未注释时,您正在更改public类型变量,因为您没有声明本地变量,您没有执

输出:

对于问题1、2、3,输出为猫科美洲狮f

取消对问题1的注释输出为猫科美洲狮c

取消注释问题2的输出是猫科美洲狮f d


取消对问题3的注释输出为猫科美洲狮d

主super is
猫科动物
,因为
扩展

  • 对于问题1,您更改了
    this.type
    type
    ,在这种情况下,它们是相同的,但您没有更改
    super.type
    ,它仍然是
    中定义的类型

  • 对于问题2和问题3,您只更改了局部变量,而没有更改超级公共
    类型

  • 当问题2已注释且问题3未注释时,您正在更改public
    类型
    变量,因为您没有声明本地变量,您没有执行
    字符串类型


问题是什么?您不了解什么?虽然理解继承是一个有趣的技术问题,但不要访问父类中的成员变量,这违反了OOP中最重要的原则之一:信息隐藏。顺便说一句:这种效果称为成员阴影
class Feline {
public String type = "f ";
public Feline() {
    System.out.print("feline ");
}
}

public class Main extends Feline {
//public String type = "c ";   //Problem 1
public Main() {
    System.out.print("cougar ");
}
void go() {
    //String type = "d"; //Problem 2
    //type = "d ";             //Problem 3
    System.out.print(this.type + super.type + type);
}
public static void main(String[] args) {
    new Main().go();
}
}