62,621
社区成员
发帖
与我相关
我的任务
分享
import static TinkingJava.Print.*;
public class Testextends extends F{
public Testextends(){
print("j="+j);
}
public static void main(String[] args){
new Testextends();
}//输出j=99,这个值是在F的构造器里赋的,难道Java中是运行时继承?
}
class F{
protected int j;
public F(){
print("j="+j);
j=99;
print("j="+j);
}
}
import static TinkingJava.Print.*;
public class Testextends extends F{
public Testextends(){
//print("j="+ j);
print("j="+ super.j);
/* 变量j是父类的,子类并没有直接包含这个
变量,而是包含了父类的引用,因此此处访问的是父类中的变量j*/
}
public static void main(String[] args){
new Testextends();
}
}
class F{
protected int j; // 此处表示变量j可被子类访问
public F(){
print("j="+j);
j=99;
print("j="+j);
}
}
实例化子类对象时,必须实例化其父类。而子类对象会包含一个指向父类对象的引用(super),
此处变量j只有一个,子类有的只是访问这个变量的引用
(简单的来说继承不是复制所有的变量和方法到自己的类里,而是包含一个引用)import static TinkingJava.Print.*;
public class Testextends extends F{
int j; //重写父类的j属性;
public Testextends(){
print("打印子类的 j="+j);
print("打印父类的 j="+super.j);
}
public static void main(String[] args){
new Testextends();
}//输出j=99,这个值是在F的构造器里赋的,难道Java中是运行时继承?
}
class F{
protected int j;
public F(){
print("j="+j);
j=99;
print("j="+j);
}
}输出子类的j是0;输出父类的j是99。说明子类不重写父类的属性和方法,只是对父类的属性和方法的一个引用。