java中关于super关键字与继承的理解

public class Chinese extends Person{
public void print(){
System.out.println("Chinese:");
super.print(); //调用父类的print
}
public static void main(String[] args){
Chinese chn=new Chinese();
chn.setName("kiweis");
chn.setAge(18); //chn的age数据已设置成18
chn.print();
System.out.println();
}
}

class Person{
public int c;
private String name;
private int age;
protected void setName(String name){
this.name=name;
}
protected void setAge(int age){
this.age=age;
}
protected void print(){
System.out.println("Name="+name+" Age="+age); /*子类通过super来调用,打印的究竟是子类的name还是父类的name呢?*/
}
}

以上定义的Chinese继承Person,我的理解是Chinese继承了Person的数据域和方法,调用set方法设置的不是Chinese的String和age么,那么super.print()打印的不是Person的String和age吗,也就是null和0,为什么运行程序输出的是kiweis和18

不不不 你的代码是有误的
public class Chinese extends Person {
@Override
public void print(){
System.out.println("Chinese:");
super.print();
}
public static void main(String[] args){
Chinese chn=new Chinese();
chn.setName("kiweis"); //
chn.setAge(18);
//这是子类调用父类Person的print()方法
chn.print(); //可以是做中国人是人的一种 输出的也是人的信息

    Person ps= new Person();    //父类是没信息的 所以是空
    System.out.println("person information:");
    ps.print();
    } 

}

“Chinese继承了Person的数据域和方法,调用set方法设置的不是Chinese的String和age么,那么super.print()打印的不是Person的String和age吗”,这些你说的都对。但是Chinese,Persion都是类,只不过Chinese类中重写print方法,

public void print(){ 
System.out.println("Chinese:"); 
super.print(); 
}  

等价于

 public void print(){ 
System.out.println("Chinese:"); 
System.out.println("Name="+name+" Age="+age); 
} 

你定义的对象只有一个**chn**(Chinese chn=new Chinese(); ),当chn调用
print()方法时,自然会打印出chn的name,age.

问题之前的错误已修改,现在又有新的问题,private修饰的数据域和方法究竟能不能被继承呢,我尝试讲protected改成private,然后用子类的实例chn调用方法,发现编译器找不到该方法,按道理来说不应该是被继承了吗,为何编译器找不到方法呢。。

私有 是不能继承的 只能继承protected 和public

父类的private修饰的数据域和方法是可以被隐式继承的,但是子类必须要通过父类的非private属性方法去访问的